用2个点找到向量

时间:2013-06-27 00:41:06

标签: python vector pygame direction

我用pygame帮助我的朋友,但我们被困住了

所以试图获得射弹的方向,但我们无法找到如何

例如:

[1,1]将进入SE

[1,-1]将进入NE

[ - 1,-1]将进入NW

和[-1,1]将转到SW

我们需要某种类型的方程式,它将取得玩家位置和鼠标位置,并找出射弹需要朝哪个方向移动

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

def update(self):

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

然后我们在射击线上击打射弹

1 个答案:

答案 0 :(得分:6)

所以,首先你要获得从玩家到光标的向量距离。 Subtracting two points gives you the vector between them

distance = [mouse.x - player.x, mouse.y - player.y]

现在,你要normalize that to a unit vector。要做到这一点,你只需得到标准(通过Pythagorean theorem),然后将矢量除以标准:

norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
direction = [distance[0] / norm, distance[1] / norm]

最后,您需要velocity向量。你可以通过速度multiplying获得方向(单位矢量)。

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

bullet_vector = [direction[0] * math.sqrt(2), direction[1] * math.sqrt(2)]

就是这样。


Here您可以看到此代码正常运行。 (这是一个交互式可视化工具,所以如果有任何你不理解的部分,你可以一步一步地逐步完成。)

我在[10.0, 25.0]处创建了一个玩家,并且在[30.0, 70.0]一般指向(但不完全是)东南方向的鼠标指向,bullet_vector最终为[0.5743665268941905, 1.2923246855119288] },一个向量指向同一个东南向的方向,速度为sqrt(2)

这表明它可以向东南方向移动(如果你想要完全向东南方向,将第8行改为mouse = Point(30.0, 45.0)),它可以进入8个罗盘点以外的方向,并且它总是以相同的速度运行。