我很难理解Math.tan()
、Math.atan()
和Math.atan2()
。
我对三角测量有基本的知识,但是使用SIN,COS,TAN等来开发游戏对我来说还是很新的。
我正在阅读一些教程,我看到,通过使用切线,我们可以得到一个物体需要旋转的角度,比如我的鼠标。那么,为什么我们仍然需要使用atan或atan2呢?
发布于 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
的函数,它允许您同时指定x
和y
参数,以避免为您进行零除法,并在右象限中给出一个角度。
(图由加雷斯提供,请也投票赞成他的答案)
在游戏开发中使用三角函数是非常普遍的,特别是使用向量,但通常库为您隐藏三角学工作。您可以在许多涉及几何操作的任务中使用sin/cos/tan从三角形中找到值。您只需要3个值(边长/角度值)就可以找到矩形三角形的其他值,因此非常有用。
你甚至可以使用正弦和余弦函数的“循环”性质来处理游戏中的特殊行为,例如,我见过cos/sin经常用它来使另一个物体掉头。
发布于 2011-07-09 09:11:17
发布于 2012-12-14 05:45:45
下面是一种稍微不同的思考trig函数的方法--包括atan()和atan2() --我觉得这很有帮助(因为某种原因,用“相反/相邻”的解释使我感到困惑)。
你可以从一个点移动到另一个点,方法是垂直移动x单位、水平单位和y单位(称为矩形坐标或笛卡尔坐标),或以Ɵ角(在2D中称为极坐标)移动距离r。
假设我们有一个极坐标(r,Ɵ),我们想把它转换成(x,y)。
cos(Ɵ)给出沿x轴分布的r的比例:
同样,sin(Ɵ)给出沿y轴分布的r的比例:
将直角坐标(x,y)转换为极坐标(r,Ɵ)如何?
R是x和y所形成的直角三角形的低音,因此:
tan(Ɵ)给出了长度r的直线的斜率--超过运行的坡度。所以:
然而,当执行y/x时,计算3/4给出的答案与计算-3/-4相同。同样,-3/4给出了与3/-4相同的答案。所以我们有atan2(y,x),它正确地处理单个符号,并防止除以-零/无穷大的错误。
https://gamedev.stackexchange.com/questions/14602
复制相似问题