目录

矢量加法

距离与长度

三角函数

图象:正弦、余弦与正切

圆周函数

简谐运动

频率与振幅

波形加法与乘法

反函数

其他材料

表达式基础

参考表格

工程文件连接

返回主页

反三角函数:Arcsine(反正弦), Arccosine(反余弦) 与 Arctangent(反正切)

利用反三角函数可以计算出相应三角函数值所对应的角度值,例如语句arcsine(n)的返回值为正弦值为n的角度值。

因为三角函数是周期性变化的,所以不同的角度值可能会有相同的三角函数值,例如,0度与360度的正弦值都为0,而反三角函数会返回最接近0度的角度值。

在Javascript中,反三角函数的返回值为角度的弧度值,所以要使用诸如旋转角度或角度控制参数时,我们需要使用转换函数radians_to_degrees()将角度单位从度转换到弧度。

与其他的三角函数相同,反三角函数存在于Math对象中,下面的表格显示出每个函数的语法结构、自变量范围及函数值范围,均以弧度或度表示:

反三角函数 输入值(自变量) 函数值, (弧度) 角度
Math.asin(number) -1 to 1 -Pi/2 to Pi/2 -90° to 90°
Math.acos(number) -1 to 1 0 to Pi 0° to 180°
Math.atan(number) -inf to inf -Pi/2 to Pi/2 -90° to 90°
Math.atan2(y, x) -inf to inf, 2D -Pi to Pi -180° to 180°

不能对大于1或小于-1的值进行反正弦或反余弦运算,因为任何角的正弦值或余弦值均在-1与+1之间,因此在这个范围之外的数值不存在可以计算出的角度。如果要求大于1或小于-1的值的反函数,会弹出下面的对话框,AE将禁用该表达式:

尽管该对话框提示你将零作为分母,但是我们的错误所在是自变量范围超出规定值,但是在反正切函数的计算中就不存在这种问题,因为任意角正切值范围为-整数至+正整数,所以反正切函数的自变量为任意整数。

你会注意到,反三角函数中有两个反正切函数:Math.atan() 和 Math.atan2(),两个函数之间的区别就是第一个函数的自变量是一个数值,第二个函数的自变量是两个数值——矢量中的X与Y值,另外第一个函数值范围为-Pi/2 弧度 至 Pi/2 弧度,第二个函数值的范围为-Pi弧度 至 Pi弧度。通常情况下我们使用第二种形式,Math.atan2()。

切记,正切=对边/临边,所以我们如果要使用第一种形式,需要使用下面的形式:

temp=opposite/adjacent;
angle=Math.atan(temp);

在使用第一种反正切函数时,有一点需要注意,当临边为零时,也就是90度角时,反正切函数不会返回正确的值,因为分母不能为零,所以反正切函数永远不会计算得出90度角,其只会弹出错误对话框。

而第二种反正切函数就可以避免临边为零时所出现的问题,使用这种方法可以正确的得到角度值。

顺便说一句,在使用第二种函数时,我们要将自变量的Y值写在前面,因为在三角函数中Y代表对边,X代表临边,而角度的正切值正好等于Y/X。

示例:指定运动

利用Math.atan2()函数可以完成简单的指定运动,所谓指定运动就是利用表达式控制一个图层或效果控制参数围绕合成中另外一个图层或点进行旋转,首先我们给出完整的表达式,然后再讨论:

this_point=position;
that_point=this_comp.layer("target").position;

delta=sub(this_point, that_point);
angle=Math.atan2(delta[1], delta[0]);
radians_to_degrees(angle);

'This_point' 与 'that_point'指明了运动点与运动中心,我们通过减法运算计算出两点之间的矢量,并且将结果赋予变量'delta'。

接下来我们将矢量中的Y与X带入函数Math.atan2()中,最后利用转换函数将计算得出的角度单位由弧度转化为度,并将该结果赋予表达式连接的参数。

当应用到旋转参数时,旋转图层的右边会始终指向旋转中心,要使旋转图层的上边指向旋转中心需要将最后计算出的角度值减去90,也就是:'radians_to_degrees(angle)-90'.

下面的例子是将表达式应用到A的旋转属性后的结果:

单击这里下载工程文件. (Windows 用户单击这里.)

 

 

所有内容版权归JJ Gifford.所有,翻译权归CG频道所有,违者必纠。