Cálculo de grados entre 2 puntos con eje Y inverso
Estoy creando un simple juego 2D en javascript/canvas. Necesito averiguar el ángulo de un determinado objeto en relación con mi posición.
Entonces: digamos que estoy en (10,10) y el objeto está en (10,5) - eso resultaría en 90 grados (como positivo Y es abajo, negativo Y es arriba) (10,10) vs (10,15) sería 270 grados.
¿Cómo lo haría?
4 answers
Supongamos que estás en (a, b) y el objeto está en (c, d). Entonces la posición relativa del objeto es (x, y) = (c-a, d-b).
Entonces usted podría utilizar el Math.atan2()
función para obtener el ángulo en radianes.
var theta = Math.atan2(-y, x);
Tenga en cuenta que el resultado está en el rango [-π, π]. Si necesita números no negativos, debe agregar
if (theta < 0)
theta += 2 * Math.PI;
Y convertir radianes a grados, multiplicar por 180 / Math.PI
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-22 14:01:17
Si sus coordenadas son (xMe, yMe) y sus coordenadas son (xThem, yThem), entonces puede usar la fórmula:
arctan((yMe-yThem)/(xThem-xMe))
Normalmente sería arctan((yThem-yMe)/(xThem-xMe))
, pero en este caso el signo del eje y se invierte.
Para convertir el resultado de radianes a grados multiplique por 180/pi.
Así que en JavaScript, esto se vería como: Math.atan((yThem-yMe)/(xThem-xMe))*180/Math.PI
Atan da un valor entre-pi/2 y pi/2 (es decir, entre -90 y 90 grados). Pero usted puede mirar qué cuadrante su (xThem-xMe, yMe-yThem) vector está en y ajustar en consecuencia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-22 14:15:01
En términos sencillos:
function pointDirection(x1, y1, x2, y2) {
return Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-23 08:10:16
En el lienzo HTML5, el origen es la esquina superior izquierda, por lo que el eje y crece de arriba a abajo. Por lo tanto, independientemente de dónde se encuentre en el círculo unitario para calcular el ángulo del punto A al centro(C), de hecho, debe hacer como
angle = Math.atan2(Cy-Ay,Ax-Cx)
Y obtendrá su resultado en el rango de [- π, π].
No tengo idea de por qué no han hecho el origen del lienzo en la esquina inferior izquierda.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-27 15:22:53