【问题标题】:Calculating distance between angles that cross -180 to 180计算穿过 -180 到 180 的角度之间的距离
【发布时间】:2017-12-30 20:44:22
【问题描述】:

我正在计算鼠标指针角度与“车辆角度”之间的差异(以度为单位)。我取该距离的一半,将其存储为偏移量,然后将车辆移至该距离,经过几次计算,最终将我移动到所需的角度。但是,当我的鼠标位于 -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 是传递给它的角度,从鼠标到自身。

【问题讨论】:

  • 您愿意分享说明所描述问题的代码片段吗?
  • @Ivan 你去。那是功能部分,我认为您不需要全部。

标签: python angle


【解决方案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 模块。

【讨论】:

  • 我试过了,但我没有看到行为有任何变化。我明白你在说什么,我知道它会如何工作,但我不知道为什么它不会。
  • @BrrrIce,包裹应该使用您想要应用于汽车的最终角度。我已经相应地编辑了我的解决方案,它确实适用于您的代码。
猜你喜欢
  • 2016-09-15
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2017-10-23
  • 2018-04-08
相关资源
最近更新 更多