Faire tourner un point d'un autre point en 2D
Question
Je veux savoir comment travailler les nouvelles coordonnées d'un point lors d'une rotation d'un angle par rapport à un autre point.
I ai une flèche de bloc et souhaite le faire pivoter d'un angle thêta par rapport à un point situé au milieu de la base de la flèche.
Ceci est nécessaire pour me permettre de dessiner un polygone entre 2 commandes à 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 la question est en outre que l'origine d'un écran est dans le coin en haut à gauche.
La solution
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
Autres conseils
Si vous utilisez GDI + pour ce faire, vous pouvez utiliser des méthodes de Transform
de l'objet Graphics
:
graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);
Ensuite, dessinez les choses réelles.
Si vous avez l'espace de noms System.Windows.Media
disponible, vous pouvez utiliser les fonctions intégrées dans les transformations:
using System.Windows.Media;
var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
var transformedPoint = transform.Transform(point);