计算从 -180 度到 180 度的角之间的距离
Calculating distance between angles that cross -180 to 180
我正在计算我的鼠标指针角度与我的“车辆角度”之间的差异(以度为单位)。我将距离的一半作为我的偏移量存储,然后将我的车辆移动到它,经过几次计算,最终将我移动到我想要的角度。但是,当我的鼠标位于 -185 时,我将其稍微向上移动到 185,也就是仅 10 度的距离,车辆会沿 "long way around" 从 -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
是传递给它的角度,从鼠标到它自己。
您可以将输出角度包装到 [-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
module。
我正在计算我的鼠标指针角度与我的“车辆角度”之间的差异(以度为单位)。我将距离的一半作为我的偏移量存储,然后将我的车辆移动到它,经过几次计算,最终将我移动到我想要的角度。但是,当我的鼠标位于 -185 时,我将其稍微向上移动到 185,也就是仅 10 度的距离,车辆会沿 "long way around" 从 -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
是传递给它的角度,从鼠标到它自己。
您可以将输出角度包装到 [-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
module。