7

この種の質問が以前に複数回行われたことを知っているので、まずお詫び申し上げます。ただし、他の質問と回答を見ても、自分の状況ではこれを機能させることができませんでした。以下に例を示します。 図1

私が単純に試みているのは、P1 と P2 の間の角度を 0 度が上に示されていると仮定して、2 の間の矢印を正しい方向に向けることができるようにすることだけです。だから私はこのようなことをします...

Point p1 = new Point(200,300); Point p2 = new Point(300,200);
double difX = p2.x - p1.x; double difY = p2.y - p1.y;
double rotAng = Math.toDegrees(Math.atan2(difY,difX));

どちらが -45 で、45 である必要がありますか? ただし、単に P1 を 300,300 (P2 の下) に変更した場合、角度は 0 になるはずですが、-90 として返されるなど、否定的な結果を返すとは考えていません。

だから、これを計算するために私が間違っていることを誰かが指摘できるかどうか疑問に思っていますか、それともこの方法でそれを行うことさえ可能ですか?

4

3 に答える 3

5

atan2(Y,X)(X,Y)は、を通る光線に対する点の角度を反時計回りの正の向きで標準デカルト座標系で計算し(1,0)ます。これは、あなたの状況でXは、ゼロ角度の光線に沿った座標であり、(小さい) 正の角度の方向の座標であり、描かれた角度が 45° になるように設定すると、. したがってX=-difYYY=difX

double rotAng = Math.toDegrees(Math.atan2(difX,-difY));
于 2015-03-25T15:21:54.267 に答える
3

ジオメトリで使用される座標系とコンピューター画面で使用される座標系を混同しています。ジオメトリでは、0,0 が左下隅のポイントであることが規則的です。ただし、画面上の 0,0 は左上隅です。

次に、画面の座標に従って画像を回転させ、角度が正しく計算されることを確認します。

したがって、一般的には、次の解決策のいずれかを選択できます。2. 問題が角度のみの場合は、結果に π/2 (90 度) を追加できます。

于 2015-03-25T15:03:38.080 に答える