Rotar un punto por otro punto en 2D


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

Tengo una flecha de bloque y quiero girarla por un ángulo theta relativo a un punto en el centro 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 está en la esquina superior izquierda.

Author: Sophie Alpert, 2009-04-24

3 answers

Si rotas el punto (px, py) alrededor del punto (ox, oy) por ángulo {[3] }obtendrás:

p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox
p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy
 127
Author: Sophie Alpert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-24 16:03:52

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

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

Luego dibuja el material real.

 8
Author: Mehrdad Afshari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-24 15:58:29

Si tiene el espacio de nombres System.Windows.Media disponible, entonces puede usar las transformaciones integradas:

    using System.Windows.Media;

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
    var transformedPoint = transform.Transform(point);
 2
Author: thumbmunkeys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-02 14:49:52