私は、別のポイントに対して相対的な角度だけ回転したときに、そのポイントの新しい座標を計算する方法を知りたいです。
ブロック矢印があり、矢印の付け根の中央にある点に対して角度θだけ回転させたい。
これは、2つのオンスクリーンコントロールの間にポリゴンを描画できるようにするために必要です。画像を使用して回転できません。
私がこれまで考えてきたことから、さらに問題を複雑にしているのは、画面の原点が左上隅にあるということです。
ポイント(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
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);