web-dev-qa-db-fra.com

Faire pivoter un point d'un autre point en 2D

Je veux savoir comment calculer les nouvelles coordonnées d'un point lorsqu'il est tourné d'un angle par rapport à un autre point.

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'à présent, ce qui complique davantage la question, c'est que l'origine d'un écran se trouve dans le coin supérieur gauche.

53
James

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

 p'x = cos (theta) * (px-ox) - sin (theta) * (py-oy) + ox 
 p'y = sin (theta) * (px-ox ) + cos (thêta) * (py-oy) + oy 
132
Sophie Alpert

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

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

Dessinez ensuite les éléments réels.

8
Mehrdad Afshari

Si vous avez le System.Windows.Media espace de noms disponible, vous pouvez alors utiliser les transformations intégrées:

    using System.Windows.Media;

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