Обратный math.atan2?
Что такое обратная функция
math.atan2
Я использую это в lua, где я могу получить инверсию math.atan
на math.tan
.
Но я здесь потерялся.
ИЗМЕНИТЬ
Хорошо, дайте мне подробнее.
Мне нужно было вычислить угол между двумя точками (x1, y1) и (x2, y2)
Я сделал
local dy = y1-y2
local dx = x1-x2
local angle = atan2(dy,dx)* 180 / pi
Теперь, если у меня есть угол, можно ли вернуться назад dy и dx?
Ответы
Ответ 1
Учитывая только угол, вы можете получить только единичный вектор, указывающий на (dx, dy)
. Чтобы получить исходный (dx, dy)
, вам также нужно знать длину вектора (dx, dy)
, который я назову len
. Вы также должны преобразовать угол, который вы получили от градусов назад к радианам, а затем использовать триггерные уравнения, упомянутые в другом месте этого сообщения. Это у вас есть:
local dy = y1-y2
local dx = x1-x2
local angle = atan2(dy,dx) * 180 / pi
local len = sqrt(dx*dx + dy*dy)
Учитывая angle
(в градусах) и длину вектора len
, вы можете получить dx
и dy
с помощью:
local theta = angle * pi / 180
local dx = len * cos(theta)
local dy = len * sin(theta)
Ответ 2
По-видимому, что-то вроде этого поможет:
x = cos(theta)
y = sin(theta)
Простой поиск в Google бросил это, и тот, кто задал вопрос, сказал, что он его решил.
Ответ 3
Вероятно, вы получите неправильные номера, если используете:
local dy = y1-y2
local dx = x1-x2
local angle = atan2(dy,dx) * 180 / pi
Если вы используете систему координат, где y становится больше по экрану, а x становится больше справа, вы должны использовать:
local dy = y1 - y2
local dx = x2 - x1
local angle = math.deg(math.atan2(dy, dx))
if (angle < 0) then
angle = 360 + angle
end
Причина, по которой вы хотите использовать это, заключается в том, что atan2 в lua даст вам число от -180 до 180. Это будет правильно, пока вы не нажмете 180, тогда как он должен выйти за пределы 180 (т.е. 187), он инвертирует его отрицательное число уменьшается с -180 до 0, когда вы приближаетесь к 360. Чтобы исправить это, мы проверяем, меньше ли угол меньше 0, и если мы добавим 360, чтобы дать нам правильный угол.
Ответ 4
В соответствии с эта ссылка:
Возвращает тангенс дуги y/x (в радианах), но использует знаки оба параметра, чтобы найти квадрант результата. (Он также обрабатывает правильно, когда x равен нулю.)
Итак, я думаю, вы можете использовать math.tan
, чтобы инвертировать его.