2009-04-24 19 views
51

Je veux savoir comment calculer les nouvelles coordonnées d'un point lorsqu'on le fait pivoter d'un angle par rapport à un autre point.Faire pivoter un point par un autre point en 2D

J'ai une flèche de bloc et je veux la faire pivoter d'un angle thêta par rapport à un point au milieu de la base de la flèche.

Ceci est nécessaire pour me permettre de dessiner un polygone entre 2 contrôles à l'écran. Je ne peux pas utiliser et faire pivoter une image. D'après ce que j'ai considéré jusqu'ici, ce qui complique encore la question, c'est que l'origine d'un écran se trouve dans le coin supérieur gauche de la page.

Répondre

126

Si vous faites pivoter le point (px, py) autour du point (ox, oy) par l'angle theta vous obtiendrez:

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

Avez-vous la version 3D en mémoire aussi? :) –

+1

Est-ce que theta serait en radiants et en degrés? Pardonnez si c'est muet -Q- .. –

+7

Cela dépend de la bibliothèque que vous utilisez pour les fonctions trig. En C, vous devez passer en radians. –

8

Si vous utilisez GDI + pour ce faire, vous pouvez utiliser Transform méthodes de l'objet Graphics:

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

Dessinez ensuite les choses réelles.

+3

Cela ne devrait-il pas être une traduction par point d'origine? – Spook

2

Si vous avez l'espace de noms disponibles System.Windows.Media, vous pouvez utiliser la construction dans les transformations:

using System.Windows.Media; 

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