14

重複の可能性:
水平軸に対する 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);

前もってありがとう、私はとてもイライラしています...

4

1 に答える 1

26

私が集めたものから、次のことを保持したいと考えています。

  • 水平線: P1 -------- P2=> 0°
  • 水平線: P2 -------- P1=> 180°

水平線を時計回りに回転

あなたは、時計回りに角度を大きくしたいと言いました。

が上になるP1 -------- P2ようにこの線を回転すると、角度は 90° になります。P1P2

ただし、反対方向に回転すると、P1P2になり、角度は -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 = 0
  • y > 0
  • y = 0
  • y < 0
  • y = 0

これは、単に符号yを反転して方向を反転できることを意味します。しかし、C# の座標は上から下に増加するため、 を計算するときに符号は既に反転していyDiffます。

于 2012-10-15T09:12:41.133 に答える