別のポイントに対してある角度だけ回転させたときに、そのポイントの新しい座標を計算する方法を知りたいです。
ブロック矢印があり、矢印の基部の中央の点に対して角度シータで回転させたいと思います。
これは、2つの画面上のコントロールの間にポリゴンを描画できるようにするために必要です。画像を使用して回転させることができません。
私がこれまで考えてきたことから、問題をさらに複雑にしているのは、画面の原点が左上隅にあるということです。
(px, py)ポイント(ox, oy)を角度ごとに回転させると、次のthetaようになります。
p'x = cos(シータ) * (px-ox) - sin(シータ) * (py-oy) + ox p'y = sin(シータ) * (px-ox) + cos(シータ) * (py-oy) + oy
これを行うためにGDI+を使用している場合は、オブジェクトTransformのメソッドを使用できます。Graphics
graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);
次に、実際のものを描きます。
名前空間が利用可能な場合はSystem.Windows.Media、組み込みの変換を使用できます。
using System.Windows.Media;
var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
var transformedPoint = transform.Transform(point);