什么是反函数
math.atan2
我在 Lua 中使用它,我可以得到math.atan
by的倒数math.tan
。
但我在这里迷路了。
编辑
好的,让我给你更多的细节。
我需要计算 2 个点 (x1,y1) 和 (x2,y2) 之间的角度,我做到了,
local dy = y1-y2
local dx = x1-x2
local angle = atan2(dy,dx)* 180 / pi
现在,如果我有角度,是否有可能取回 dy 和 dx?
什么是反函数
math.atan2
我在 Lua 中使用它,我可以得到math.atan
by的倒数math.tan
。
但我在这里迷路了。
编辑
好的,让我给你更多的细节。
我需要计算 2 个点 (x1,y1) 和 (x2,y2) 之间的角度,我做到了,
local dy = y1-y2
local dx = x1-x2
local angle = atan2(dy,dx)* 180 / pi
现在,如果我有角度,是否有可能取回 dy 和 dx?
仅给定角度,您只能导出指向 的单位向量(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
,您可以推导出dx
和dy
:
local theta = angle * pi / 180
local dx = len * cos(theta)
local dy = len * sin(theta)
显然,这样的事情会有所帮助:
x = cos(theta)
y = sin(theta)
简单的谷歌搜索抛出了这个问题,问这个问题的人说它解决了这个问题。
如果您使用以下方法,您可能会得到错误的数字:
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 来给我们正确的角度。