重複の可能性:
横軸に対する2点間の角度の計算方法は?
私は何年もの間これを探していました、そしてそれは本当に私を苛立たせているので、私はただ尋ねることに決めました...
2つの点(つまり、x1、y1、およびx2、y2)がある場合、y1 == y2およびx1> x2の場合、角度は180度であると仮定して、これら2つの点の間の角度を計算します。
私は(高校の知識を使用して)使用している以下のコードを持っていますが、希望する結果が得られないようです。
float xDiff = x1 - x2;
float yDiff = y1 - y2;
return (float)Math.Atan2(yDiff, xDiff) * (float)(180 / Math.PI);
事前のおかげで、私はとてもイライラしています...
私が集めたものから、あなたは以下を保持したいと思います:
P1 -------- P2
=> 0°P2 -------- P1
=> 180°あなたは、角度を時計回りに大きくしたいと言いました。
P1 -------- P2
がP1
より上になるようにこの線をP2
回転させると、角度は90°でなければなりません。
ただし、反対方向に回転した場合、P1
はP2
の下になり、角度は-90°または270°になります。
atan2
での作業基礎:P1
を原点と見なし、原点に対するP2
の角度を測定すると、P1 -------- P2
は正しく0
を生成します。
float xDiff = x2 - x1;
float yDiff = y2 - y1;
return Math.Atan2(yDiff, xDiff) * 180.0 / Math.PI;
ただし、atan2
CCW方向の角度を大きくしてみましょう。原点を中心にCCW方向に回転すると、y
は次の値を通過します。
これは、y
の符号を単純に反転して方向を反転できることを意味します。ただし、C#の座標は上から下に増加するため、yDiff
を計算するときに符号はすでに逆になっています。