2012-07-09 12 views
10

¿Cuál es la inversa de la funcióninversa de math.atan2?

math.atan2 

yo uso esto en lua donde puedo conseguir la inversa de math.atan por math.tan.
Pero estoy perdido aquí.

EDITAR

bien te voy a dar más detalles.

que se necesitan para calcular el ángulo entre 2 puntos (x1, y1) y (x2, y2) hice

local dy = y1-y2 
    local dx = x1-x2 
    local angle = atan2(dy,dx)* 180/pi 

Ahora Si tengo el ángulo, es posible volver dy y dx?

Respuesta

15

Dado solo el ángulo, solo puede derivar un vector de unidad que apunta al (dx, dy). Para obtener el (dx, dy) original, también necesita saber la longitud del vector (dx, dy), al que llamaré len. También tiene que convertir el ángulo que deriva de grados a radianes y luego usar las ecuaciones trigonométricas mencionadas en otra parte de esta publicación. Eso es lo que tiene:

local dy = y1-y2 
    local dx = x1-x2 
    local angle = atan2(dy,dx) * 180/pi 
    local len = sqrt(dx*dx + dy*dy)

Dada angle (en grados) y la longitud del vector, len, puede derivar dx y dy por:

local theta = angle * pi/180 
    local dx = len * cos(theta) 
    local dy = len * sin(theta)
+0

¡Ah, gracias! Ahora la respuesta parece obvia. ¡Me siento como un idiota! Mi matemática es DEMASIADO oxidado, supongo. ¡Gracias de nuevo! :) – SatheeshJM

+0

En Lua puede usar 'math.deg' y' math.rad' para convertir grados y radianes. – lhf

+0

@lhf: Gracias. Nunca hice nada en lua, así que pensé que este enfoque sería seguro. – andand

4

Al parecer, algo como esto ayudará a:

x = cos(theta) 
y = sin(theta) 

simple búsqueda de Google lanzó este, y el tipo que hizo la pregunta dijo que lo resolvió.

+0

Sí, también vi eso.¿Sabes qué indican los valores de xey (calculados por sin y cos) con respecto a mi pregunta (he actualizado la pregunta)? – SatheeshJM

+0

Asegúrate de que 'theta' esté en radianes. El código proporcionado por el OP se convierte en grados. – lhf

0

Según this reference:

Devuelve el arco tangente de y/x (en radianes), pero utiliza los signos de ambos parámetros para encontrar el cuadrante del resultado. (También maneja correctamente el caso de que X sea igual a cero.)

así que supongo que se puede utilizar para invertir math.tan también.

1

Probablemente obtendrá los números equivocados si utilizar:

local dy = y1-y2 
local dx = x1-x2 
local angle = atan2(dy,dx) * 180/pi 

Si está utilizando el sistema de coordenadas donde y se hace más grande que va abajo de la pantalla y x se hace más grande va a la derecho, entonces debería usar:

local dy = y1 - y2 
local dx = x2 - x1 
local angle = math.deg(math.atan2(dy, dx)) 
if (angle < 0) then 
    angle = 360 + angle 
end 

La razón por la que desea utilizar esto es porque atan2 en lua le dará un número entre -180 y 180. Será correcta hasta llegar a 180 a continuación, ya que debe ir más allá 180 (es decir, 187) lo invertirá a un número negativo bajando de -180 a 0 a medida que te acercas a 360. Para corregir esto, verificamos si el ángulo es menor que 0 y si es así, agregamos 360 para darnos el ángulo correcto.