web-dev-qa-db-ja.com

2Dでポイントを別のポイントだけ回転する

私は、別のポイントに対して相対的な角度だけ回転したときに、そのポイントの新しい座標を計算する方法を知りたいです。

ブロック矢印があり、矢印の付け根の中央にある点に対して角度θだけ回転させたい。

これは、2つのオンスクリーンコントロールの間にポリゴンを描画できるようにするために必要です。画像を使用して回転できません。

私がこれまで考えてきたことから、さらに問題を複雑にしているのは、画面の原点が左上隅にあるということです。

53
James

ポイント(px, py)をポイント(ox, oy)の周りに角度thetaだけ回転すると、次のようになります。

 p'x = cos(theta)*(px-ox)-sin(theta)*(py-oy)+ ox 
 p'y = sin(theta)*(px-ox )+ cos(theta)*(py-oy)+ oy 
132
Sophie Alpert

GDI +を使用してそれを行う場合、TransformオブジェクトのGraphicsメソッドを使用できます。

graphics.TranslateTransform(point of Origin);
graphics.RotateTransform(rotation angle);

次に、実際のものを描画します。

8
Mehrdad Afshari

System.Windows.Media名前空間を使用できる場合は、組み込みの変換を使用できます。

    using System.Windows.Media;

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
    var transformedPoint = transform.Transform(point);
2
thumbmunkeys