Comment calculer la différence entre deux mesures d'angle? [dupliquer]

Cette question a déjà une réponse ici:

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°
18
demandé sur andand 2011-09-27 18:27:24

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;
    }
36
répondu Dmitry Ryadnenko 2018-08-30 07:39:10

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.

13
répondu M. Usman Khan 2017-10-26 03:34:14

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.

6
répondu JB Nizet 2011-09-27 14:33:08

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).

4
répondu Artefacto 2011-09-27 14:37:20

Que Diriez-vous de ce qui suit:

dist = (a - b + 360) % 360;
if (dist > 180) dist = 360 - dist;
3
répondu NPE 2011-09-27 14:32:43

diff = MAX (angle1, angle2) - MIN (angle1, angle2);

si (diff > 180) diff = 360-diff;

1
répondu Oliver 2011-10-09 22:39:51