56 votes

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

Je veux savoir comment travailler sur les nouvelles coordonnées pour un point lors de la rotation d'un angle par rapport à un autre point.

J'ai un bloc de flèche et souhaitez le faire pivoter d'un angle thêta par rapport à un point dans le milieu de la base de la flèche.

Cela est nécessaire pour me permettre de dessiner un polygone entre 2 commandes à l'écran. Je ne peux pas l'utiliser et de faire pivoter une image.

De ce que j'ai considéré jusqu'à présent ce qui complique davantage la question est que l'origine d'un écran est dans le coin en haut à gauche.

138voto

Ben Alpert Points 30381

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

p'x = cos (thêta) * (px-ox) - sin (thêta) * (py-oy) + ox
p'y = péché (thêta) * (px-ox) + cos (thêta) * (py-oy) + oy

8voto

Mehrdad Afshari Points 204872

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

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

Ensuite, dessinez les choses réelles.

2voto

thumbmunkeys Points 11757

Si vous avez l'espace de noms System.Windows.Media disponible, vous pouvez 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);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X