2009-04-24 24 views
51

Quiero saber cómo calcular las nuevas coordenadas para un punto cuando se gira un ángulo relativo a otro punto.Girar un punto por otro punto en 2D

Tengo una flecha de bloque y quiero rotarla un ángulo theta con respecto a un punto en el medio de la base de la flecha.

Esto es necesario para permitirme dibujar un polígono entre 2 controles en pantalla. No puedo usar y rotar una imagen.

De lo que he considerado hasta ahora lo que complica aún más el asunto es que el origen de una pantalla se encuentra en la esquina superior izquierda.

Respuesta

126

Si gira alrededor del punto punto (px, py)(ox, oy) por el ángulo theta obtendrá:

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

¿También tiene la versión 3D en la memoria? :) –

+1

¿Theta estaría en radiantes y grados? Perdonar si tonto -Q- .. –

+7

Depende de qué biblioteca está utilizando para las funciones trigonométricas. En C, necesitas pasar radianes. –

8

Si está utilizando GDI + para hacer eso, puede utilizar Transform métodos del objeto Graphics:

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

tire del material real.

+3

¿No debería ser eso una traducción por punto de origen? – Spook

2

Si usted tiene el espacio de nombres System.Windows.Media disponible, entonces usted puede utilizar el construido en transformaciones:

using System.Windows.Media; 

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