2012-07-09 89 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,给我们正确的角度。