Cálculo de rotación optima de un bot hacia su destino

A ver si alguien me puede echar una mano. El caso es que suponiendo que tenemos un robot en el punto (x, y) que está mirando en una dirección que viene dada por un ángulo a respecto al eje X. Y tenemos un objeto que está en (x', y'), se trata de cálcular el ángulo de giro mínimo para orientar al robot hacia ese objeto.

El supuesto código que debería de ser capaz de hacer eso http://pastebin.com/m60c8f30f

El caso es que tal y como está, dependiendo de donde esté ese destino, el robot se pone a dar vueltas sobre si mismo, o va en dirección totalmente contraria o a veces ve directo hacia la galleta. Me da a mi que el problema está en la parte que trata de ver cual es el giro mínimo... pero en fin no estoy muy seguro.
Se me ocurre algo asi(pseudocodigo)

angulo_diferencia = signo(pointAngle -angle) * ( (pointAngle -angle) mod 2*PI );
if( |angulo_diferencia| > PI )
angulo_diferencia = signo(angulo_diferencia) * (angulo_diferencia -2*PI);

Con ( (pointAngle -angle) mod 2*PI ) me refiero a que si te sale negativo o mayor de 2PI pues lo conviertas al equivalente entre 0 y 2PI.

Me parece que esta bien pero a estas horas cualquiera sabe.

¿Es para robocode?

Saludos
creo que tu problema es que mezclas el vector actual de giro (o sea, el giro que tiene actualmente el robot) con el giro que quieres darle para que encare el objetivo.

tienes un robot en x,y con un vector de direccion indicado por un angulo (entiendo sexagesimal, o sea, 360º=0º)
y quieres encarar dicho robot con un objetivo que esta en otras coordenadas x,y.

bajo mi punto de vista es un problema trigonometrico SIMPLISIMO. ¿como andas de trigonometria? o sea, ¿senos, cosenos, tangentes y demas?
la dificultad es si quieres hacer un giro suave, aunque aun así es bastante fácil xD
3 respuestas