2010-08-13 5 views
1

J'essaie de faire une rotation d'un objet de jeu en définissant un point de départ et de fin et des trames X pour faire le mouvement. Puis interpolez l'angle de début et de fin pour le faire.Angle interpolant

Cela fonctionne bien, mais j'essaie de faire l'itinéraire le plus court possible en option (par opposition à "faire le plus long itinéraire"). Dans la plupart des cas cela fonctionne, mais si la rotation dépasse 360 ​​ou en dessous de 0, je ne sais pas comment le détecter et modifier les chiffres. (par exemple, si je veux prendre l'itinéraire le plus court de 270 à 90, l'itinéraire le plus court va au-dessus de 360/0, donc n'est jamais utilisé, donc 270 devrait devenir -45 pour interpoler à 90). Je suis terrible à expliquer et je ne suis pas l'anglais natif pour l'arrondir, donc j'utiliserai pseudocode de ce que j'ai.

thing.start_angle = 180 
thing.end_angle = 90 
thing.angle = interpolate(thing.start_angle, thing.end_angle, position) 

J'aime cette façon (pour le contrôle du temps détaillé sur une « si l'angle> ANGLE_MAX puis angle - 1 »), mais je ne peux pas trouver une « règle » pour savoir comment détecter si l'angle tourne ... Comment puis-je savoir si la rotation descendra au-dessous de 0 ou au-dessus de 360 ​​pour agir en conséquence?

Répondre

1

L'angle se terminera si

thing.end_angle - thing.start_angle> = 180 ou < -180

(en supposant une plage angulaire de 0 à 379).

+0

Semblait travailler avec <= -180 au lieu de 0, malgré l'utilisation d'angles dans le bon format ... eh bien, cela a fonctionné, merci beaucoup! – MissHalberd

+0

Oui, vous avez raison :) – sje397