1

我需要得到两个角度之间的最短方向。就像如果 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

谢谢你的帮助!

4

1 回答 1

1

当然,这只是根据您选择的角度设置方向。

如果您正在计算从a1to的角度/方向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 的值,而不管模运算符与负数的相对位置和工作方式如何。

如果您使前提条件更具限制性,则可以大大简化它,确保a1a2限制在范围内0..359

# precondition: 0 <= [a1,a2] <= 359
angle = (a2 - a1 + 360) % 360
于 2014-12-05T03:40:31.683 回答