函数的反函数是什么
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?
答案 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
,您可以通过以下方式推导出dx
和dy
:
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)
返回y / x的弧切线(以弧度表示),但使用符号 这两个参数都可以找到结果的象限。 (它也处理 正确的是x为零的情况。)
所以我猜你也可以使用math.tan
来反转它。