35

ベクトルaからbまでの符号付き角度シータをどのように見つけますか?

そして、はい、私はtheta = arccos((ab)/(| a || b |))であることを知っています。

ただし、これには記号は含まれていません(つまり、時計回りと反時計回りの回転を区別しません)。

aからbに回転するための最小角度を教えてくれるものが必要です。正の符号は、+x軸から+y軸への回転を示します。逆に、負の符号は+x軸から-y軸への回転を示します。

assert angle((1,0),(0,1)) == pi/2.
assert angle((0,1),(1,0)) == -pi/2.
4

2 に答える 2

67

使用したいものは、「内積」と呼ばれることがよくあります。つまり、一方のベクトルに垂直なベクトルを見つけてから、もう一方のベクトルとの内積を見つけます。

if(a.x*b.y - a.y*b.x < 0)
    angle = -angle;

これを行うこともできます:

angle = atan2( a.x*b.y - a.y*b.x, a.x*b.x + a.y*b.y );
于 2010-01-27T21:44:38.893 に答える
37

選択した数学ライブラリにatan2()関数がある場合:

signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)
于 2010-01-27T20:44:34.960 に答える