我正在计算鼠标指针相对于我的'车辆角度的角度之间的差异,以度为单位。我占据了那个距离的一半,我将其作为我的偏移存储,然后将我的车辆移动到它,经过几次计算后,最终将我移动到我想要的角度。但是,当我的鼠标位于-185时,我将它略微移动到185,距离只有10度,车辆从“-185”开始走向0,然后再回到185。我已经尝试了很多方法让它能够通过-180到180的边界,但没有运气。
下面是代码:
def get_angle(self, p1, p2):
return m.atan2(p2[1]-p1[1],p2[0]-p1[0])
def update(self):
mouse_pos = pygame.mouse.get_pos()
self.update_vehicle(self.pos, self.get_angle(self.pos, mouse_pos), r.black)
def update_vehicle(self, pos, dir, color):
self.dir += (dir - self.dir) / 50
其中self.dir
是我的车辆实现的角度,dir
是传递给它的角度,从鼠标到自身。
答案 0 :(得分:1)
在将输出角度应用到汽车之前,您可以将输出角度包装到[-pi,pi]间隔中:
def update_vehicle(self, pos, dir, color):
a = ((dir - self.dir + m.pi) % (2 * m.pi)) - m.pi
self.dir += a / 50
发生的事情是我们将pi添加到值(这样我们的目标是0到2pi的正间隔),然后我们删除无用的完整转弯(使用mod 2pi)并最终返回到我们的初始-pi到pi引用(删除之前插入的pi)。
因此,-400º变为-40º,-240º变为120º,240º变为-120º等等......这里有一小部分示例:
-400° -> -40°
-320° -> 40°
-240° -> 120°
-160° -> -160°
-80° -> -80°
0° -> 0°
80° -> 80°
160° -> 160°
240° -> -120°
320° -> -40°
400° -> 40°
顺便说一下,我假设m
是本地math
模块。