Comment calculer la différence entre deux mesures d'angle? [dupliquer]
Cette question a déjà une réponse ici:
- la plus petite différence entre 2 Angles 8 réponses
Comment puis-je calculer la différence de deux angles (en degrés) en Java, de sorte que le résultat est dans l'intervalle [0°, 180°]?
Par exemple:
350° to 15° = 25°
250° to 190° = 60°
6 réponses
/**
* Shortest distance (angular) between two angles.
* It will be in range [0, 180].
*/
public static int distance(int alpha, int beta) {
int phi = Math.abs(beta - alpha) % 360; // This is either the distance or 360 - distance
int distance = phi > 180 ? 360 - phi : phi;
return distance;
}
en plus de Nickes answer, si vous voulez "Signed difference"
int d = Math.abs(a - b) % 360;
int r = d > 180 ? 360 - d : d;
//calculate sign
int sign = (a - b >= 0 && a - b <= 180) || (a - b <=-180 && a- b>= -360) ? 1 : -1;
r *= sign;
EDITED:
Où 'a' et 'b' sont deux angles pour trouver la différence.
'd' est la différence. "r" est le résultat / la différence finale.
il suffit de prendre la valeur absolue de leur différence, puis, si plus grand que 180, soustraire 360° et prendre la valeur absolue du résultat.
ne
(15 - 350) % 360
si la direction n'a pas d'importance (vous voulez celle qui donne la plus petite valeur), faites la soustraction inverse (mod 360) et calculez la plus petite valeur des deux (par exemple avec Math.min
).
Que Diriez-vous de ce qui suit:
dist = (a - b + 360) % 360;
if (dist > 180) dist = 360 - dist;
diff = MAX (angle1, angle2) - MIN (angle1, angle2);
si (diff > 180) diff = 360-diff;