Debo comenzar con esto, no estoy cerca de una persona matemática. El código que he encontrado en otra pregunta parece estar funcionando un poco ... excepto que hace que el objeto que coloco gire en un círculo grande, principalmente fuera de la pantalla.Rotación de un objeto alrededor de un vector central punto
Aquí está el código:
public void Update(GameTime gameTime)
{
Location = RotateAboutOrigin(Center, Origin, 0.01f);
}
public Vector2 RotateAboutOrigin(Vector2 point, Vector2 origin, float rotation)
{
var u = point - origin; //point relative to origin
if (u == Vector2.Zero)
return point;
var a = (float)Math.Atan2(u.Y, u.X); //angle relative to origin
a += rotation; //rotate
//u is now the new point relative to origin
u = u.Length() * new Vector2((float)Math.Cos(a), (float)Math.Sin(a));
return u + origin;
}
ubicación está configurada por un clic del ratón en una posición arbitraria en todo el vector central.
Center es el centro (lo adivinaste) del objeto que coloco cuando hago clic. Se determina simplemente dividiendo la altura y el ancho de la textura.
El origen es el vector2 que estoy intentando rotar. Está establecido estáticamente en 384,384.
Como mejor que puedo decir, se está haciendo la distancia entre los dos vectores y luego usando atan2 para determinar el ángulo. El resto después es un misterio para mí. Soy consciente de que debería aprender todo lo que hace, y tengo la intención de hacerlo cuando vaya a la universidad (solo una década tarde) a partir de la primavera. Intenté leer sobre ellos, pero estoy perdido. Cualquier ayuda sería apreciada.
Además, si tiene un buen sitio de trigonometría para dummies puede recomendarlo, estaré encantado de leerlo.
http://stackoverflow.com/questions/7846775/how-to-gradually-rotate-an-object-to-face-another-turning-the-shortest-distance – Olle89