2009-04-24 7 views
51

Ich möchte wissen, wie man die neuen Koordinaten für einen Punkt ausarbeitet, wenn er um einen Winkel relativ zu einem anderen Punkt gedreht wird.Drehen Sie einen Punkt um einen anderen Punkt in 2D

Ich habe einen Blockpfeil und möchte ihn um einen Winkel Theta relativ zu einem Punkt in der Mitte der Basis des Pfeils drehen.

Dies ist erforderlich, um ein Polygon zwischen zwei Bildschirmsteuerelementen zu zeichnen. Ich kann ein Bild nicht verwenden und drehen.

Von was ich bis jetzt betrachtet habe, was die Sache weiter erschwert, ist, dass der Ursprung eines Bildschirms in der oberen linken Ecke ist.

Antwort

126

Wenn Sie Punkt (px, py) um Punkt (ox, oy) durch Winkel drehen theta Sie erhalten:

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

Haben Sie auch die 3D-Version im Speicher? :) –

+1

Würde Theta in Radianten und Grad sein? Vergeben, wenn dumb -Q- .. –

+7

Es hängt davon ab, welche Bibliothek Sie für die Trigger-Funktionen verwenden. In C müssen Sie Radianten übergeben. –

8

Wenn Sie GDI + verwenden, das zu tun, können Sie Transform Methoden des Graphics-Objekts verwenden:

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

dann die eigentlichen Sachen ziehen.

+3

Sollte das nicht eine Übersetzung nach Herkunft sein? – Spook

2

Wenn Sie den System.Windows.Media Namensraum zur Verfügung haben, dann können Sie die eingebaute Transformationen verwenden:

using System.Windows.Media; 

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