2011-01-07 1 views
1

J'ai un cercle divisé en quarts. J'ai besoin d'un algorithme capable de faire tourner le cercle d'une position à l'autre de la manière la plus efficace.Plateau rotatif efficace à 4 emplacements

Les « plateaux » sont nommés 1 à 4.

J'utilise maintenant le Algoritm:

int degrees = (currentPos - newPos) * 90; 

en utilisant l'algorithme je reçois combien de degrés que je dois tourner le cercle pour se rendre à la nouvelle position. Cependant, si je suis en position 4 et que je dois passer à 1, le résultat sera 4 - 1 * 90 = 270. Dans ce cas, le plus efficace serait de faire tourner -90 au lieu de 270. (de même pour passer de 1 à 4).

Quelqu'un a-t-il eu une bonne idée de comment faire cela? Je peux bien sûr utiliser une instruction if:

 if(degrees >= -180 && degrees <= 180) 
     sortingTrayMotor.rotate(degrees); 
    else if(degrees == -270) 
     sortingTrayMotor.rotate(90); 
    else 
     sortingTrayMotor.rotate(-90); 

Je suppose qu'il existe une meilleure façon de le faire avec une opération mod.

Répondre

2

Exactement ce que vous faites, seulement si le résultat est> 180 degrés, soustrayez 360 degrés.