math.atan2的倒数?

时间:2012-07-09 12:08:25

标签: math lua trigonometry

函数的反函数是什么

math.atan2

我在lua中使用它,我可以通过math.atan获得math.tan的倒数 但我迷失在这里。

修改

好的,让我提供更多细节。

我需要计算2点(x1,y1)和(x2,y2)之间的角度 我做了

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

现在如果我有角度,是否有可能回到dy和dx?

4 个答案:

答案 0 :(得分:19)

只给出角度,你只能得到一个指向(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)

答案 1 :(得分:4)

显然,这样的事情会有所帮助:

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

简单的谷歌搜索引发了这种情况,提问的人说它解决了这个问题。

答案 2 :(得分:2)

如果您使用以下内容,可能会收到错误的数字:

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

你想要使用它的原因是因为lua中的atan2会给你一个介于-180和180之间的数字。它会是正确的,直到你达到180然后它应该超过180(即187)它会将它反转为当你接近360时,负数从-180下降到0。为了纠正这个问题,我们检查角度是否小于0,如果是,我们加上360来给我们正确的角度。

答案 3 :(得分:0)

根据this reference

  

返回y / x的弧切线(以弧度表示),但使用符号   这两个参数都可以找到结果的象限。 (它也处理   正确的是x为零的情况。)

所以我猜你也可以使用math.tan来反转它。