2009-04-24 16 views
51

Voglio sapere come elaborare le nuove coordinate per un punto quando ruotato di un angolo rispetto a un altro punto.Ruota un punto in un altro punto in 2D

Ho una freccia blocco e da ruotare di un angolo theta rispetto ad un punto nel centro della base della freccia.

Questo è necessario per consentirmi di disegnare un poligono tra 2 controlli su schermo. Non posso usare e ruotare un'immagine.

Da quello che ho considerato finora ciò che complica ulteriormente la questione è che l'origine di uno schermo è nell'angolo in alto a sinistra.

risposta

126

Se si ruota punto (px, py) attorno al punto (ox, oy) di un angolo theta si otterrà:

 
p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox 
p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy 
+2

Hai anche la versione 3D in memoria? :) –

+1

Sarebbe in radianti e gradi? Perdona se dumb-Q- .. –

+7

Dipende dalla libreria che stai usando per le funzioni trigonometriche. In C, devi passare in radianti. –

8

Se si utilizza GDI + per farlo, è possibile utilizzare Transform metodi dell'oggetto Graphics:

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

quindi disegnare la roba reale.

+3

Non dovrebbe essere una traduzione per -point di origine? – Spook

2

Se avete la System.Windows.Media namespace disponibili, quindi è possibile utilizzare il costruito nel trasformazioni:

using System.Windows.Media; 

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