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.
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
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.
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);