Estoy tratando de calcular la diferencia más pequeña entre dos ángulos.¿La diferencia más pequeña entre dos ángulos?
Este es mi código actual (una ligera variación de algo que encontré en línea):
float a1 = MathHelper.ToDegrees(Rot);
float a2 = MathHelper.ToDegrees(m_fTargetRot);
float dif = (float)(Math.Abs(a1 - a2);
if (dif > 180)
dif = 360 - dif;
dif = MathHelper.ToRadians(dif);
Funciona bien, salvo en los casos en el borde de un círculo. Por ejemplo, si el ángulo actual es 355 y el ángulo objetivo es 5, calcula que la diferencia es -350 en lugar de 10, ya que 365 grados es igual a 5 grados.
¿Alguna idea sobre lo que puedo hacer para que esto funcione?
esto parece correcto. también en realidad no necesitas convertir a grados y luego de vuelta a radianes - puedes calcular en radianes –
No hay amor por 'MathHelper.WrapAngle' en las respuestas :( –
Gran llamada, @Andrew. Llegué a esto sin ningún conocimiento de MathHelper, pero WrapAngle parece ser la solución de escritura. Ojalá hubieras publicado una solución, pero como no lo hiciste, actualizaré mi respuesta. – Prestaul