首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >atan和atan2在游戏中的用途是什么?

atan和atan2在游戏中的用途是什么?
EN

Game Development用户
提问于 2011-07-08 02:03:19
回答 7查看 61.9K关注 0票数 48

我很难理解Math.tan()Math.atan()Math.atan2()

我对三角测量有基本的知识,但是使用SIN,COS,TAN等来开发游戏对我来说还是很新的。

我正在阅读一些教程,我看到,通过使用切线,我们可以得到一个物体需要旋转的角度,比如我的鼠标。那么,为什么我们仍然需要使用atan或atan2呢?

EN

回答 7

Game Development用户

回答已采纳

发布于 2011-07-08 02:21:47

切线公式如下:

tan(angle) = opposite/adjacent

请参阅此图:

其中a是相邻边,o是相对侧,theta是角度。同样,正弦和余弦是sin(ang)=o/h和cos(ang)=a/h,其中h是长边:http://www.mathwords.com/s/sohcahtoa.htm

同时,atan (弧切线的缩写,也称为逆切线)是tan的反面,如下所示:

atan(opposite/adjacent) = angle

因此,如果您知道对边和相邻边的值(例如,通过从鼠标坐标中减去对象的坐标),您就可以使用atan获得角度的值。

然而,在游戏开发中,通常情况下,相邻方等于0(例如,向量的x坐标为0)。记住,tan(angle) = opposite/adjacent是一个灾难性的零除以零错误的可能性应该是明确的.因此,许多库都提供了一个名为atan2的函数,它允许您同时指定xy参数,以避免为您进行零除法,并在右象限中给出一个角度。

(图由加雷斯提供,请也投票赞成他的答案)

在游戏开发中使用三角函数是非常普遍的,特别是使用向量,但通常库为您隐藏三角学工作。您可以在许多涉及几何操作的任务中使用sin/cos/tan从三角形中找到值。您只需要3个值(边长/角度值)就可以找到矩形三角形的其他值,因此非常有用。

你甚至可以使用正弦和余弦函数的“循环”性质来处理游戏中的特殊行为,例如,我见过cos/sin经常用它来使另一个物体掉头。

票数 97
EN

Game Development用户

发布于 2011-07-09 09:11:17

票数 63
EN

Game Development用户

发布于 2012-12-14 05:45:45

下面是一种稍微不同的思考trig函数的方法--包括atan()和atan2() --我觉得这很有帮助(因为某种原因,用“相反/相邻”的解释使我感到困惑)。

你可以从一个点移动到另一个点,方法是垂直移动x单位、水平单位和y单位(称为矩形坐标或笛卡尔坐标),或以Ɵ角(在2D中称为极坐标)移动距离r。

假设我们有一个极坐标(r,Ɵ),我们想把它转换成(x,y)。

cos(Ɵ)给出沿x轴分布的r的比例:

  • 如果r=1,则x= cos(Ɵ)。
  • 如果r= 100,则x= 100 * cos(Ɵ)。
  • 一般x=r* cos(Ɵ)。

同样,sin(Ɵ)给出沿y轴分布的r的比例:

  • 如果r=1,那么y= sin(Ɵ)。
  • 如果r= 100,那么y= 100 * sin(Ɵ)。
  • 一般说来,y=r* sin(Ɵ)。

将直角坐标(x,y)转换为极坐标(r,Ɵ)如何?

R是x和y所形成的直角三角形的低音,因此:

  • R= sqrt( x_x + y_y )

tan(Ɵ)给出了长度r的直线的斜率--超过运行的坡度。所以:

  • tan(Ɵ) = y/x
  • Ɵ= atan(y/x)

然而,当执行y/x时,计算3/4给出的答案与计算-3/-4相同。同样,-3/4给出了与3/-4相同的答案。所以我们有atan2(y,x),它正确地处理单个符号,并防止除以-零/无穷大的错误。

  • atan2(y,x)Ɵ=
票数 12
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/14602

复制
相关文章

相似问题

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