Pytanie odwrotność math.atan2?


Jaka jest odwrotność funkcji

math.atan2

Używam tego w lua, gdzie mogę uzyskać odwrotność math.atan przez math.tan.
Ale jestem tutaj zagubiony.

EDYTOWAĆ

OK, pozwól mi podać więcej szczegółów.

Musiałem obliczyć kąt między 2 punktami (x1, y1) i (x2, y2) Zrobiłem

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

Teraz Jeśli mam kąt, czy można odzyskać dy i dx?


12
2017-07-09 12:08


pochodzenie




Odpowiedzi:


Biorąc pod uwagę tylko kąt, można czerpać tylko wektor jednostkowy wskazujący (dx, dy). Aby uzyskać oryginał (dx, dy) musisz również znać długość wektora (dx, dy), które zadzwonię len. Konieczne jest również przekształcenie uzyskanego kąta ze stopni na radiany, a następnie użycie równania triggitów wspomnianego w innym miejscu tego wpisu. To masz:

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

Dany angle (w stopniach) i długość wektora, len, możesz czerpać dx i dy przez:

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

17
2017-07-09 12:29



Ah, dzięki! Teraz odpowiedź wydaje się oczywista. Czuję się jak idiota! MOJA matematyka jest ZBYT, jak sądzę. Dzięki jeszcze raz! :) - SatheeshJM
W Lua możesz użyć math.deg i math.rad konwertować pomiędzy stopniami i radianami. - lhf
@lhf: Dzięki. Nigdy nie robiłem nic w lua, więc pomyślałem, że to podejście będzie bezpieczne. - andand


Najwyraźniej coś takiego pomoże:

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

Prosta wyszukiwarka Google rzuciła to w oczy, a facet, który zadał to pytanie, powiedział, że to rozwiązało.


4
2017-07-09 12:11



Tak, też to widziałem. Czy wiesz, jakie wartości x i y (obliczone przez grzech i cos) wskazują w odniesieniu do mojego pytania (zaktualizowałem pytanie)? - SatheeshJM
Upewnić się theta jest w radianach Kod podany przez OP zamienia się na stopnie. - lhf


Prawdopodobnie otrzymasz błędne liczby, jeśli użyjesz:

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

Jeśli używasz układu współrzędnych, w którym y zwiększa się w dół ekranu, a x zwiększa się w prawo, powinieneś użyć:

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

Powodem, dla którego chcesz tego użyć, jest to, że atan2 in lua daje ci liczbę od -180 do 180. Będzie to poprawne, dopóki nie osiągniesz wartości 180, ponieważ powinno przekroczyć 180 (tj. 187) zmieni ją na liczbę ujemną zejście z -180 do 0, gdy zbliżysz się do 360. Aby to poprawić, sprawdzamy, czy kąt jest mniejszy niż 0, a jeśli dodamy 360, podajemy poprawny kąt.


2
2018-03-31 03:56





Według to odniesienie:

Zwraca styczną łuku y / x (w radianach), ale używa znaków   oba parametry, aby znaleźć kwadrant wyniku. (To także obsługuje   poprawnie przypadek, w którym x wynosi zero.)

Sądzę, że możesz z tego skorzystać math.tan odwrócić to także.


0
2017-07-09 12:12