首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >math.atan2的逆?

math.atan2的逆?
EN

Stack Overflow用户
提问于 2012-07-09 12:08:25
回答 4查看 18.1K关注 0票数 20

函数的反比是什么?

代码语言:javascript
复制
math.atan2

我在Lua中使用这个,在这里我可以得到math.atan的逆math.tan

但我在这里迷路了。

编辑

好的,让我给你更多的细节。

我需要计算两点之间的夹角(x1,y1)和(x2,y2),

代码语言:javascript
复制
local dy = y1-y2 
local dx = x1-x2
local angle = atan2(dy,dx)* 180 / pi

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-09 12:29:39

仅给定角度,只能导出指向(dx, dy)的单位向量。要获得原始的(dx, dy),还需要知道向量(dx, dy)的长度,我称之为len。你还必须把你从度导出的角度转换回弧度,然后使用本文其他部分提到的三角方程。那就是你有:

代码语言:javascript
复制
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

代码语言:javascript
复制
local theta = angle * pi / 180
local dx = len * cos(theta)
local dy = len * sin(theta)
票数 30
EN

Stack Overflow用户

发布于 2012-07-09 12:11:03

显然,像这样的东西会有帮助:

代码语言:javascript
复制
x = cos(theta)
y = sin(theta) 

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

票数 5
EN

Stack Overflow用户

发布于 2014-03-31 03:56:05

如果您使用:

代码语言:javascript
复制
local dy = y1-y2 
local dx = x1-x2
local angle = atan2(dy,dx) * 180 / pi

如果您使用的是坐标系统,其中y变得更大,沿着屏幕向下,x变得更大,在右边,那么您应该使用:

代码语言:javascript
复制
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),它将反转为一个负数,从-180下降到0,当你接近360。为了纠正这一点,我们检查是否角度小于0,如果是,我们添加360给我们正确的角度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11394706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档