19

什么是反函数

math.atan2

我在 Lua 中使用它,我可以得到math.atanby的倒数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

4 回答 4

26

仅给定角度,您只能导出指向 的单位向量(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,您可以推导出dxdy

local theta = angle * pi / 180
local dx = len * cos(theta)
local dy = len * sin(theta)
于 2012-07-09T12:29:39.163 回答
5

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

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

简单的谷歌搜索抛出了这个问题,问这个问题的人说它解决了这个问题。

于 2012-07-09T12:11:03.837 回答
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 来给我们正确的角度。

于 2014-03-31T03:56:05.660 回答
0

根据这个参考

返回 y/x 的反正切(以弧度为单位),但使用两个参数的符号来查找结果的象限。(它还可以正确处理 x 为零的情况。)

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

于 2012-07-09T12:12:13.950 回答