Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Ynfiniti en Noviembre 01, 2015, 02:58:15 PM

Título: ¿Cómo devolver el ángulo más grande con angle_difference? [SOLUCIONADO]
Publicado por: Ynfiniti en Noviembre 01, 2015, 02:58:15 PM
La función angle_difference siempre devuelve el ángulo más pequeño, y quisiera el ángulo más largo, ¿alguna idea?  :-[
Título: Re:¿Cómo devolver el ángulo más grande con angle_difference?
Publicado por: Clamud en Noviembre 01, 2015, 05:27:57 PM
Podría ser así:
[gml]
d = angle_difference( a,b );
if( d > 0 ) d -= 360;
else d += 360;
[/gml]
Título: Re:¿Cómo devolver el ángulo más grande con angle_difference?
Publicado por: Ynfiniti en Noviembre 01, 2015, 09:51:16 PM
Gracias Clamud, eso lo hace, pero lo que quiero es hacer esto:

(https://dl.dropboxusercontent.com/u/39289049/Grados.png)

Me estoy confundiendo xD, ¿alguna idea?  :-[

*Cuando se mueva en reversa, lo hará a una velocidad determinada*
Título: Re:¿Cómo devolver el ángulo más grande con angle_difference?
Publicado por: penumbra en Noviembre 02, 2015, 12:00:11 AM
Aquí dejo este ejemplo que parece comportarse parecido a la explicación que diste (si es que entendí)

En el ejemplo, las variables a y b son los ángulos límites: a = 90° (donde inicia el giro) y b = 200° (donde termina)
http://www.mediafire.com/download/myn5h3a87jqbi7j/rotacion.gmz

El ángulo máyor debe calcularse si es que alguno de los ángulos límites se encuentra en los cuadrantes 3 y 4. El ejemplo no está muy desarrollado y puede no haga exactamente lo que buscas, pero probablemente sirva de guía. Hacer click en el botón azul para que el objeto comience a girar.

Lo que hace el script angle_max(), es que cambia el ángulo b = °200 a un valor de -160
Título: Re:¿Cómo devolver el ángulo más grande con angle_difference?
Publicado por: Ynfiniti en Noviembre 02, 2015, 12:43:32 AM
¡Gracias Penumbra!  :D, pero ya lo logré haciendo esto:

if(devolver){
    var
    point = point_direction(oCirculo.x,oCirculo.y,x,y),
    dif = angle_difference(90,point),
    time = 4.5;
   
    if(sign(dif) == -1){
        dif += 360;
    }
   
    dir = point;
    dir += (dif/time);
   
    if(dir == 90){devolver = false;}
}