首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找具有2个点的向量

寻找具有2个点的向量
EN

Stack Overflow用户
提问于 2013-06-27 08:41:06
回答 1查看 15.6K关注 0票数 4

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

所以我们试图得到一个抛射物的方向,但是我们不能找出

例如:

1,1将转到SE

1,-1将转到东北

-1,-1将转到NW

和-1,1将转到SW

我们需要一个方程式来计算玩家的位置和鼠标的位置,并找出投射物需要的方向。

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

代码语言:javascript
复制
def update(self):

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

然后我们在直角坐标上发射弹丸

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 08:50:16

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

代码语言:javascript
复制
distance = [mouse.x - player.x, mouse.y - player.y]

现在,您想要normalize that to a unit vector。为此,您只需获得范数(通过Pythagorean theorem),然后将向量除以范数:

代码语言:javascript
复制
norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
direction = [distance[0] / norm, distance[1] / norm]

最后,您需要velocity向量。你可以通过将方向(单位向量)与速度相乘( multiplying )得到。

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

代码语言:javascript
复制
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个指南针之外的其他方向行驶,并且始终以相同的速度行驶。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17332759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档