所以,我不是最有数学知识的人,我希望得到一些急需的反馈。 首先,我的目标是让一个图像追逐我的鼠标。有几件事我没想到会得到反馈。在
1)追逐是非常僵硬的,并跟随鼠标在一个非常“角度”方式,只在屏幕上的设定点(中间x轴、中间y轴和对角线)改变方向。在
2)我希望速度保持恒定,但图像越靠近鼠标移动越快。在
3)当图像到达鼠标时,它“弹弓”通过鼠标,造成模糊的疯狂,而不是到达鼠标位置并停止。在
这些是我最担心的,但是如果你看到我可能误解的地方,请告诉我。我很想了解整个向量/三角函数(以便很快进入物理学)。在
def follow (self):
mouse_pos = pygame.mouse.get_pos()
diff = (self.xPos-mouse_pos[0], self.yPos-mouse_pos[1])
vector = math.sqrt(diff[0]**2 + diff[1]**2)
distance = (self.xPos/vector, self.yPos/vector)
if (self.xPos, self.yPos) == mouse_pos:
return
if mouse_pos[0] >= self.xPos:
self.xPos += distance[0]
else:
self.xPos -= distance[0]
if mouse_pos[1] >= self.yPos:
self.yPos += distance[1]
else:
self.yPos -= distance[1]
(整个程序可以在这里看到http://ideone.com/6OxWLi)
提前感谢您的帮助!在
我不知道你对变量
vector
和distance
是什么意思,但在我看来,它们的名称应该互换。在您的代码中,vector
是diff
向量的长度,使用毕达哥拉斯定理计算:在您的代码中,有一个
^{pr2}$distance
变量,它是位置向量,只是标准化的(除以它自己的长度)。这就是为什么我宁愿交换他们的名字。另外,更有趣的是规范化形式的diff
向量。所以不如这样做:从现在开始,每次我写
distance
,我假设你已经交换了名称,并且是指距离值,而不是标准化向量。与vector
相同,从现在起我将其称为diff_norm
(归一化差分向量)。现在,针对你的问题:
1)和2)在使用
diff_norm
向量时应该更好(规范化的差分向量而不是规范化的位置向量,这真的没有意义:p)。在3)图像的位置
(self.xPos, self.yPos)
在任何一点上都不可能是鼠标的位置。因为你用浮点数来表示你的位置(python为你这样做),它们可能永远不会精确到像素上。所以你的图像永远不会精确到鼠标位置。因此,与其写(self.xPos, self.yPos) == mouse_pos
,不如检查图像与鼠标的距离是否真的很近,例如小于1或2个像素:另外,您不需要在末尾使用所有if/else,
diff_norm
向量可以有负值,因此您不需要检查它们是否为负值-只需从位置向量中减去diff\u norm向量,如下所示:相关问题 更多 >
编程相关推荐