c# - una - rotar objeto con mouse unity
Girar un punto por otro punto en 2D (3)
Quiero saber cómo calcular las nuevas coordenadas para un punto cuando se gira en un ángulo relativo a otro punto.
Tengo una flecha de bloque y quiero rotarla con un ángulo theta relativo 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 está en la esquina superior izquierda.
Si está utilizando GDI + para hacer eso, puede usar los métodos de Transform
del objeto Graphics
:
graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);
Luego dibuja las cosas reales.
Si tiene el espacio de nombres System.Windows.Media
disponible, 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);
Si gira el punto (px, py)
alrededor del punto (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