Python 寻找具有2个点的向量

Python 寻找具有2个点的向量,python,vector,pygame,direction,Python,Vector,Pygame,Direction,我在帮我的朋友玩游戏,但是我们被卡住了 所以我们试图找到一个炮弹的方向,但我们无法找到方法 例如: [1,1]将向东南方向移动 [1,-1]将向东北移动 [-1,-1]将向西北方向移动 [1,1]将向西南方向移动 我们需要一个等式,它可以取玩家的位置和鼠标的位置,并找出投射物需要朝哪个方向移动 这里是我们插入向量的地方: def update(self): self.rect.x += self.vector[0] self.rect.y += self.vector[1]

我在帮我的朋友玩游戏,但是我们被卡住了

所以我们试图找到一个炮弹的方向,但我们无法找到方法

例如:

[1,1]将向东南方向移动

[1,-1]将向东北移动

[-1,-1]将向西北方向移动

[1,1]将向西南方向移动

我们需要一个等式,它可以取玩家的位置和鼠标的位置,并找出投射物需要朝哪个方向移动

这里是我们插入向量的地方:

def update(self):

    self.rect.x += self.vector[0]
    self.rect.y += self.vector[1]

然后,我们在矩形坐标处快速移动射弹,因此,首先要获得从播放机到光标的向量距离:

现在,你想。要做到这一点,只需得到范数(除以),然后将向量除以范数:

norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
direction = [distance[0] / norm, distance[1] / norm]
最后,你需要向量。你可以通过方向(单位向量)和速度得到

由于您希望向SE发射的子弹具有向量
[1,1]
,因此您(大概)希望所有子弹都以该速度向量的速度移动,即
sqrt(2)
(再次根据毕达哥拉斯定理)。因此:

就这样


您可以看到此代码正在工作。(这是一个交互式可视化工具,因此,如果有任何部分您不理解,您可以一步一步地浏览。)

我在
[10.0,25.0]
处创建了一个播放器,并将鼠标指针从
[30.0,70.0]
处的东南方向(但不完全如此)移到
[30.0,70.0]
,而
子弹头矢量
最终成为
[0.5743665268941905,1.292324655119288]
,一个以
sqrt(2)的速度指向同一东南方向的矢量


这表明它可以向东南方向移动(如果你想准确地向东南移动,请将第8行更改为
鼠标=点(30.0,45.0)
),它可以向8个罗盘点以外的方向移动,并且始终以相同的速度移动。

这个等式背后的规则是什么?玩家是否按照从玩家到鼠标光标的向量方向开火?还是从屏幕中心到鼠标光标?还是别的什么?她被限制在8个指南针方向,或者她可以从任何角度发射吗?玩家可以从任何方向发射,比如玩家在玩家前面点击箭头,如果玩家点击角色的后面,箭头将一直向前,箭头将返回文字,因此根据鼠标点和玩家位置,我们需要找到箭头需要到达的方向。这似乎只是在8个指南针方向上工作,但它根本不会转为SE?您的
x
y
值是整数吗?如果是这样,您将希望将它们转换为
浮点
。(您只需执行
**2.0
即可,而不必执行
norm
行中的
**2
)。如果您需要调试代码的帮助,您需要实际向我们展示您的代码。(理想情况下是一个小的,可运行的,可以演示问题。)代码可以工作,因为如果我使用斜率公式,它可以工作,但是我不能调节速度,所以我不能这样做that@ChristianCareaga当前位置我不明白最后的评论。你所说的“调节速度”是什么意思?为什么你不能这样做?还有什么是因为它你不能做的?
norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
direction = [distance[0] / norm, distance[1] / norm]
bullet_vector = [direction[0] * math.sqrt(2), direction[1] * math.sqrt(2)]