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.

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top