我需要两个角度之间的最短方向。比如,如果Ang1是5,Ang2是355,那么我想要它返回,我需要从Ang1中减去它才能到达Ang2。
我有一些代码可以告诉我最短的距离,但不是最短的方向。
函数getShortAngle(a1,a2)
{
var angle = (Math.abs(a1 - a2))%360;
if(angle > 180)
angle = 360 - angle;
return angle;
};
trace(getShortAngle(360, 720));
或者在Smallbasic:
Sub GetShortestpath
angle = Math.Remainder((Math.abs(a1 - a2)),360)
if angle > 180 Then
angle = 360 - angle
EndIf
Return = angle
EndSub
谢谢你的帮助!
发布于 2014-12-05 03:40:31
当然,这只是根据你选择的角度来确定方向。
如果您正在计算从a1
到a2
的角度/方向,下面的伪代码应该给您所需要的:
# precondition: [a1,a2] >= 0
angle = ((a2 % 360) - (a1 % 360) + 360) % 360
direction = CLOCKWISE
if angle > 180:
angle = 360 - angle
direction = ANTICLOCKWISE
当差值正好为180°时,它更倾向于顺时针方向。
请原谅这个得到角度的复杂表达式,它只是为了确保你得到一个0到359的值,而不管你的模运算符与负数的相对位置和工作方式如何。
如果将前提条件限制得更严格,确保a1
和a2
限制在0..359
范围内,就可以大大简化它。
# precondition: 0 <= [a1,a2] <= 359
angle = (a2 - a1 + 360) % 360
https://stackoverflow.com/questions/27308321
复制相似问题