53

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

ブロック矢印があり、矢印の基部の中央の点に対して角度シータで回転させたいと思います。

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

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

4

3 に答える 3

135

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

p'x = cos(シータ) * (px-ox) - sin(シータ) * (py-oy) + ox
p'y = sin(シータ) * (px-ox) + cos(シータ) * (py-oy) + oy
于 2009-04-24T16:03:52.040 に答える
8

これを行うためにGDI+を使用している場合は、オブジェクトTransformのメソッドを使用できます。Graphics

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

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

于 2009-04-24T15:58:29.930 に答える
2

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

    using System.Windows.Media;

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
    var transformedPoint = transform.Transform(point);
于 2014-08-02T14:49:52.890 に答える