¿Cómo puedo calcular la diferencia de dos medidas de ángulo (en grados) en Java por lo que el resultado está en el rango [0 °, 180 °]?¿Cómo calculo la diferencia de dos medidas de ángulo?
Por ejemplo:
350° to 15° = 25°
250° to 190° = 60°
¿Cómo puedo calcular la diferencia de dos medidas de ángulo (en grados) en Java por lo que el resultado está en el rango [0 °, 180 °]?¿Cómo calculo la diferencia de dos medidas de ángulo?
Por ejemplo:
350° to 15° = 25°
250° to 190° = 60°
/**
* Length (angular) of a shortest way between two angles.
* It will be in range [0, 180].
*/
private 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;
}
Sólo haz
(15 - 350) % 360
Si la dirección no importa (desea que el que se obtiene el valor más pequeño), y luego hacer la resta inversa (mod 360) y calcule el valor más pequeño de los dos (por ejemplo, con Math.min
).
¿Puedes explicar un poco más? no te entiendo "luego haz la resta inversa (mod 360) y calcula el valor más pequeño". – NullPointerException
@Y me refiero a hacer también (350 - 15)% 360. – Artefacto
min ((ab)% 360, (ba)% 360) @ AndroidUser99 – squid
Cómo sobre lo siguiente:
dist = (a - b + 360) % 360;
if (dist > 180) dist = 360 - dist;
acaba de tomar el valor absoluto de su diferencia, entonces, si es mayor que 180, restar 360 ° y tomar el valor absoluto del resultado.
diff = MAX (ángulo1, ángulo2) - MIN (ángulo1, ángulo2);
if (diff> 180) diff = 360 - diff; "Firmado diferencia"
Además de respuesta Nickes, si quieres
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;
EDITADO:
Donde 'a' y 'b' son dos ángulos para hallar la diferencia de.
'd' es la diferencia. 'r' es resultado/diferencia final.
¿Qué representan 'd' y' r' en este contexto? Diferencia y rotación? –
Supongo que 'a' y' b' representan 'targetAngle' y' currentAngle' respectivamente. –
@StevenVascellaro sí, eso es correcto – usman
Si está calculando la distancia, ¿por qué el resultado es en grados? –
¿Puedes aclarar si estás buscando algo integrado o solo estás pidiendo un método? también debe tener en cuenta la dirección? Su primer ejemplo es 25 grados en el sentido de las agujas del reloj y el segundo 60 grados en el sentido contrario a las agujas del reloj. Si solo quiere la distancia más corta, sus resultados deberían ser de 0 a 180 (o -180 a 180 si desea mostrar la dirección). – Chris
Por cierto, no debe permitir 360 porque 360 = 0. El dominio de los argumentos de entrada debe ser [0, 360). – m0skit0