计算跨越-180到180的角度之间的距离

时间:2017-12-30 20:44:23

标签: python angle

我正在计算鼠标指针相对于我的'车辆角度的角度之间的差异,以度为单位。我占据了那个距离的一半,我将其作为我的偏移存储,然后将我的车辆移动到它,经过几次计算后,最终将我移动到我想要的角度。但是,当我的鼠标位于-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是传递给它的角度,从鼠标到自身。

1 个答案:

答案 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模块。