python – 用2个点查找向量

我用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]

然后我们将射弹撞击在射线上

解决方法:

所以,首先你要获得从播放器到光标的向量距离. 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行改为鼠标= Point(30.0,45.0)),它可以进入8个罗盘点以外的方向,并且它总是以相同的速度运行.

上一篇:C#枚举相关用法


下一篇:贪吃蛇