Подтвердить что ты не робот

Обратный 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?

4b9b3361

Ответ 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, чтобы инвертировать его.