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
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
.
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
Je voudrais essayer:
if degrees is between [-360, 360]
degrees = (degrees + 360) % 360;
else degrees = (degrees % 360) + 360) % 360;