2012-07-09 62 views
10

的功能是什麼math.atan2的逆?

math.atan2 

我在Lua使用這個,我可以通過math.tan得到math.atan倒數的倒數。
但我迷失在這裏。

編輯

OK讓我提供更多的細節。

我需要2點(X1,Y1)和我沒有

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

現在如果我有角度,有沒有可能找回DY和DX(x2,y2) 之間計算的角度?

回答

15

只給出角度,你只能得出一個指向(dx, dy)的單位矢量。爲了得到原始的(dx, dy),您還需要知道矢量(dx, dy)的長度,我將其稱爲len。您還必須將您從角度導出的角度轉換回弧度,然後使用本文中其他地方提到的trig方程。這是你必須:

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

鑑於angle(度)和矢量長度,len,你可以得到dxdy由:

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

啊謝謝!現在答案似乎很明顯。我覺得自己像個白癡! 我的數學太生鏽了。 再次感謝! :) – SatheeshJM 2012-07-09 12:45:56

+0

在Lua中,您可以使用'math.deg'和'math.rad'在度數和弧度之間進行轉換。 – lhf 2012-07-09 13:03:58

+0

@lhf:謝謝。我從來沒有在lua做過任何事情,所以我認爲這種做法是安全的。 – andand 2012-07-09 14:09:34

4

顯然,這樣的事情會有所幫助:

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

簡單的谷歌搜索這扔了,誰問這個問題的人說,它解決了這個問題。

+0

是的,我也看到了。你知道什麼樣的x和y值(通過sin和cos計算)表明我的問題(我已經更新了這個問題)? – SatheeshJM 2012-07-09 12:19:37

+0

確保'theta'是弧度,由OP給出的代碼轉換爲度數。 – lhf 2012-07-09 12:20:30

0

根據this reference

返回Y/X(弧度)的反正切,但使用的 兩個參數的跡象,找到結果的象限。 (它也處理 正確x是零的情況下)。

所以我想你可以使用math.tan也顛倒了。

1

你可能會得到錯誤的數字,如果你使用:

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),當它接近360時,將它反轉爲一個負數,從-180降到0。爲了糾正這個問題,我們檢查角度是否小於0,如果是,我們加360,給我們正確的角度。