2010-07-05 6 views
3

Je souhaite calculer un angle dans le sens des aiguilles d'une montre entre deux segments de ligne A et B. L'angle résultant doit donc être compris entre 0 et 360-1 degrés. J'ai vu toutes les autres réponses dans SO, mais ils m'ont donné des angles négatifs. Merci.Angle dans le sens des aiguilles d'une montre entre deux lignes

Répondre

2

Pour mettre tous les angles dans une plage 0-359 en C#, vous pouvez utiliser le "algorithme" suivant:

public int Normalise (int degrees) { 
    int retval = degrees % 360; 
    if (retval < 0) 
     retval += 360; 
    return retval; 
} 

C# suit les mêmes règles que C et C++ et i % 360 vous donnera une valeur entre -359 et 359 pour tout entier, alors la deuxième ligne doit s'assurer qu'il est compris entre 0 et 359 inclusivement.

Une version sournoise sur une ligne:

degrees = ((degrees % 360) + 360) % 360; 

qui normaliser dans toutes les conditions. Je ne suis pas sûr que je m'inquiéterais trop à propos de l'utilisation de la doublure en ligne à moins que la performance soit critique, mais je l'expliquerai.

De degrees % 360, vous obtiendrez un numéro entre -359 et 359. L'ajout de 360 modifiera la plage entre 1 et 729. Ensuite, le dernier % 360 le ramènera à la plage 0 à 359.

1

vous avez sûrement pu adapter une solution avec des angles négatifs pour toujours 0-360 en ajustant:

flottant positif = (angle < 0)? (360 + angle): Angle

2

Je voudrais essayer:

if degrees is between [-360, 360] 
    degrees = (degrees + 360) % 360; 
else degrees = (degrees % 360) + 360) % 360; 
Questions connexes