1

2 つの角度の間の最短方向を取得する必要があります。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

確かに、選択した角度に基づいて方向を設定しているだけです。

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と、大幅に単純化できます。a20..359

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