我这里只用Math.sin()这个函数来举例,我们用到这个函数时大多是想得到一个在某一值域内不断循环的一个数值,比如Math.sin(角度值) ,无论“角度值”怎么变化,我们都会得到一个值在0->1->0->-1>0间不断循环的数值。
但是如果我们在AE中直接写Math.sin(30),我们得到的结果不会是0.5。???为啥呢?因为AE中三角函数默认的单位是弧度而不是角度,很郁闷吧!那我们想正常使用的话就要把角度变为弧度,这样得出的值才和我们要求的一样!
什么是角度,估计没有人忘,那什么是弧度?忘的人有一半吧!呵呵,我也是百度到的。弧度的定义是弧长等于圆半径的弧所对的圆心角为1弧度。根据定义,一周的弧度数为2πr/r=2π,360°角=2π弧度,最终我们得到 1度=π/180弧度 ,把它带入三角函数得到Math.sin(π/180弧度) ,那30度的SIN 值就应该是Math.sin(30*π/180弧度) ,AE默认单位就是弧度,π的写法是Math.PI ,所以当我们要某角度的SIN 值时就可以写成Math.sin(角度值*Math.PI/180)。下面只要引入一个变量代表角度值,就可以得到一个在1与-1之间循环运动的数值了。AE中为我们提供了time 这个变量,如果我们把time 看做角度值的话,那Math.sin(time*Math.PI/180)则表示每360秒经历一次0->1->0->-1>0的循环,这个周期太长了,我们希望1秒经历一次循环,那我们可以把time 变成原来的360倍写成 Math.sin(360*time*Math.PI/180),调整一下我们得到 Math.sin(time*2*Math.PI),这个表达式的意思是:SIN 值在每一秒内都经历了一次0->1->0->-1>0的循环。
有了这个基准,我们再有其他要求的时候就可以在这个表达式的基础上做推导。
比如我们想1秒内循环3次,那我们就要加快time, 就可以写成 Math.sin(3*time*2*Math.PI)
如果我们想5秒循环1次,那我们就应该减慢time ,写成 Math.sin(time/5*2*Math.PI)
如果我们希望1秒内在100与-100之间循环3次的话,就可以写成Math.sin(3*time*2*Math.PI)*100
如果我们希望2秒内在100与-100之间循环3次的话,就可以写成Math.sin(3*time/2*2*Math.PI)*100
真啰嗦,呵呵!不过我们的最终结果也出来了。
当我们希望N 秒内在X 与-X 之间循环M 次的话,我们可以写成 Math.sin(M/N*time*2*Math.PI)*X
写了半天,这个表达式最简单的应用应该是在弹性类表达式中,比如 Math.sin(M/N*time*2*Math.PI)*X/Math.exp(time*I)。
Math.exp(time*I) 这个函数应该是返回一个以E 为底的time*I次幂,在上面这个表达式中用来控制弹性衰减的速度,也就是说I 值越大衰减越快I 值越小衰减越慢。
我这里只用Math.sin()这个函数来举例,我们用到这个函数时大多是想得到一个在某一值域内不断循环的一个数值,比如Math.sin(角度值) ,无论“角度值”怎么变化,我们都会得到一个值在0->1->0->-1>0间不断循环的数值。
但是如果我们在AE中直接写Math.sin(30),我们得到的结果不会是0.5。???为啥呢?因为AE中三角函数默认的单位是弧度而不是角度,很郁闷吧!那我们想正常使用的话就要把角度变为弧度,这样得出的值才和我们要求的一样!
什么是角度,估计没有人忘,那什么是弧度?忘的人有一半吧!呵呵,我也是百度到的。弧度的定义是弧长等于圆半径的弧所对的圆心角为1弧度。根据定义,一周的弧度数为2πr/r=2π,360°角=2π弧度,最终我们得到 1度=π/180弧度 ,把它带入三角函数得到Math.sin(π/180弧度) ,那30度的SIN 值就应该是Math.sin(30*π/180弧度) ,AE默认单位就是弧度,π的写法是Math.PI ,所以当我们要某角度的SIN 值时就可以写成Math.sin(角度值*Math.PI/180)。下面只要引入一个变量代表角度值,就可以得到一个在1与-1之间循环运动的数值了。AE中为我们提供了time 这个变量,如果我们把time 看做角度值的话,那Math.sin(time*Math.PI/180)则表示每360秒经历一次0->1->0->-1>0的循环,这个周期太长了,我们希望1秒经历一次循环,那我们可以把time 变成原来的360倍写成 Math.sin(360*time*Math.PI/180),调整一下我们得到 Math.sin(time*2*Math.PI),这个表达式的意思是:SIN 值在每一秒内都经历了一次0->1->0->-1>0的循环。
有了这个基准,我们再有其他要求的时候就可以在这个表达式的基础上做推导。
比如我们想1秒内循环3次,那我们就要加快time, 就可以写成 Math.sin(3*time*2*Math.PI)
如果我们想5秒循环1次,那我们就应该减慢time ,写成 Math.sin(time/5*2*Math.PI)
如果我们希望1秒内在100与-100之间循环3次的话,就可以写成Math.sin(3*time*2*Math.PI)*100
如果我们希望2秒内在100与-100之间循环3次的话,就可以写成Math.sin(3*time/2*2*Math.PI)*100
真啰嗦,呵呵!不过我们的最终结果也出来了。
当我们希望N 秒内在X 与-X 之间循环M 次的话,我们可以写成 Math.sin(M/N*time*2*Math.PI)*X
写了半天,这个表达式最简单的应用应该是在弹性类表达式中,比如 Math.sin(M/N*time*2*Math.PI)*X/Math.exp(time*I)。
Math.exp(time*I) 这个函数应该是返回一个以E 为底的time*I次幂,在上面这个表达式中用来控制弹性衰减的速度,也就是说I 值越大衰减越快I 值越小衰减越慢。