Python-PyGame-学习向量/动画

Python-PyGame-学习向量/动画,python,pygame,vector-graphics,Python,Pygame,Vector Graphics,所以,我在数学方面不是最有知识的,我希望得到一些急需的反馈。 对于初学者来说,我的目标就是让一个图像追逐我的鼠标。有一些事情发生了,我没有想到,我希望得到反馈 1) 追逐是非常严格的,并且以一种非常。。。“角度”方式,仅在屏幕上似乎是设定点的位置(中间x轴、中间y轴和对角线)改变方向 2) 我希望速度是恒定的,但图像越靠近鼠标,移动越快 3) 当图像到达鼠标时,它“弹弓”经过鼠标,造成模糊的疯狂,而不是到达鼠标位置并停止 这些是我主要关心的问题,但是如果你看到任何我可能误解的事情,请告诉我。我渴

所以,我在数学方面不是最有知识的,我希望得到一些急需的反馈。 对于初学者来说,我的目标就是让一个图像追逐我的鼠标。有一些事情发生了,我没有想到,我希望得到反馈

1) 追逐是非常严格的,并且以一种非常。。。“角度”方式,仅在屏幕上似乎是设定点的位置(中间x轴、中间y轴和对角线)改变方向

2) 我希望速度是恒定的,但图像越靠近鼠标,移动越快

3) 当图像到达鼠标时,它“弹弓”经过鼠标,造成模糊的疯狂,而不是到达鼠标位置并停止

这些是我主要关心的问题,但是如果你看到任何我可能误解的事情,请告诉我。我渴望了解整个向量/三角(很快进入物理学)的东西

(整个程序可以在这里看到)


提前感谢您的帮助

我不知道你对变量
vector
distance
的意思,但在我看来,它们的名称应该互换。在您的代码中,
vector
diff
向量的长度,使用毕达哥拉斯定理计算:

d^2 = dx^2 + dy^2
d = sqrt(dx^2 + dy^2)
在您的代码中,有
距离
变量,它是位置向量,仅标准化(除以自身长度)。这就是为什么我宁愿交换他们的名字。另外,更有趣的是规范化形式的
diff
向量。因此,我们应该这样做:

distance = math.sqrt(diff[0]**2, diff[1]**2) # instead of `vector = ...`
diff_norm = (diff[0] / distance, diff[1] / distance) # instead of `distance = ...`
从现在开始,每次我写
distance
,我都假设您已经交换了名称,并表示距离值,而不是规范化向量。与
vector
相同,从现在起我将其称为
diff\u norm
(标准化差分向量)。

现在,谈谈你的问题:

1) 2)使用
diff_norm
向量(标准化的差分向量而不是标准化的位置向量,这真的没有意义:p)时应该更好

3) 您的图像的位置
(self.xPos,self.yPos)
不太可能在任何时候都是鼠标的位置。因为您使用浮点数作为位置(python会为您这样做),所以它们可能永远不会精确位于像素上。因此,您的图像永远不会精确位于鼠标位置。因此,与其写
(self.xPos,self.yPos)=mouse\u pos
,不如检查图像与鼠标的距离是否非常近,例如小于1或2个像素:

if distance <= 2: return

刚换完。它工作得很好。我理解得更多一些,但仍然不是100%。非常感谢你的回答!你可能想看《向量导论》,作者:khanacademy.org。他从数学上解释了什么是向量及其含义。确保观看后续视频!
if distance <= 2: return
self.xPos -= diff[0]
self.yPos -= diff[1]