2010-09-11 5 views
0

J'ai ce flotteur qui est un angle de rotation.Enveloppant un numéro?

Camera.roty += (float) diffx * 0.2; 

où diff est le changement de la position de la souris.

En OpenGL, il va envelopper s'il dépasse 360 ​​ou est en dessous de 0, mais comment pourrais-je faire si je veux vérifier si l'angle est entre 0 et 180?

Merci

+0

Pouvez-vous expliquer un peu ce que vous entendez par « emballage »? –

+0

@ Thomasz- Je pense qu'il veut dire qu'un angle de 365 serait automatiquement converti en 5 (ou -90 serait converti en 270). Essentiellement, 'angle% 360'. – bta

+0

Quel angle voulez-vous vérifier? 'diffx'? 'Camera.roty' avant l'ajout? Après l'addition? – bta

Répondre

1

Pour faire face à des valeurs à virgule flottante, vous pouvez faire:

angle = angle - floor(angle/360) * 360; 

Cela devrait faire face à des valeurs négatives bien trop (-1 serait converti en 359).

+0

Yay vôtre travaillé – jmasterx

0

Selon commentaires par @bta:

pourquoi ne pas utiliser:

angle % 180 

et enregistrer ce numéro comme un angle?

+0

Mod ne fonctionne pas lorsque son negetive – jmasterx

+0

vous pourriez enregistrer des informations sur le signe, abs(), puis mod, à la fin de multiplier par le signe. –

2

Si je comprends bien votre question, vous êtes à la recherche essentiellement pour quelque chose comme ça ?:

float Wrap(const float Number, const float Max, const float Min) { 
if(Number > 0.0f) { 
    return fmod(Number, Max) + Min; 
} 
else { 
    return Max - fmod(abs(Number), Max) + Min; 
} 
} 
+0

ne fonctionne que dans le sens des aiguilles d'une montre, si le nombre est <0, cela ne fonctionne pas – jmasterx

Questions connexes