Foros - Stratos

Programadores => Código de la Semana => Mensaje iniciado por: ethernet en 24 de Marzo de 2003, 12:02:53 AM

Título: Funcion para control de angulo - fiero
Publicado por: ethernet en 24 de Marzo de 2003, 12:02:53 AM


//Devuelve un valor entre -180.0 y 180.0

float negAng(float angulo)

{

angulo=fmod(angulo,360);

if(angulo>180) angulo-=360;

if(angulo<-180) angulo+=360;

return(angulo);

}



//Devuelve un valor entre 0.0 y 360.0

float posAng(float angulo)

{

angulo=fmod(angulo,360);

if(angulo<0) angulo+=360;

return(angulo);

}



//Suma un incremento a un angulo y devuelve un valor entre 0.0 y 360.0

//dentro de los límites

bool sumarAngulo(float *angulo,float incremento,float topemin,float topemax)

{

bool encontradoTope=0

float ang,topeMAX,topeMIN;



topeMAX=negAng(topemax);

topeMIN=negAng(topemin);

ang=negAng(*angulo);

if(incremento>0)

{

 if(ang>topeMAX) ang-=360;

 ang+=incremento;

 if(ang>topeMAX)

 {

  ang=topemax;

  encontradoTope=1;

 }

 *angulo=posAng(ang);

}

else if(incremento<0)

{

 if(ang<topeMIN) ang+=360;

 ang+=incremento;

 if(ang<topeMIN)

 {

  ang=topemin;

  encontradoTope=1;

 }

 *angulo=posAng(ang);

}

return encontradoTope;

}





//Ejemplo de uso



float rotacionCamaraX=0;

float limiteAbajo=-50;

float limiteArriba=60;



sumarAngulo(&rotacionCamaraX,-10,limiteAbajo,limiteArriba);







Título: Funcion para control de angulo - fiero
Publicado por: ethernet en 31 de Marzo de 2003, 07:10:02 PM
No teneis cama? xDD