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