【AE表达式】三角波与锯齿波函数 #AE表达式#


 三角波函数:

function triWave(t,cycle){

return 1-Math.abs(( t%(cycle)+cycle)%(cycle)-cycle/2)/(cycle/2);   //by leizingyiu

}

triWave(time,1);

其中t相当于sin函数的x,cycle为周期,一个周期相当于sin函数的2π



锯齿波函数:

function sawWave(t,cycle){

return ((t)%cycle+cycle)%cycle/cycle;   //by leizingyiu

}

sawWave(time,1)

其中t相当于sin函数的x,cycle为周期,一个周期相当于sin函数的2π


目前两函数输出范围都是闭区间[0,1],如果需要[-1,1],请自己乘以2,然后减去1。



不知道你们有没有觉得很眼熟,实际上这相当于 loopOut loopIn 中,参数选 pingpong 和 cycle  的区别。





————————————————————————————————————————————————————————————————————————

下面是数学课时间:



锯齿的生成过程:

1:正比例函数(y=x)


t=time;

t;


2:正比例函数,在垂直方向上偏移(y=x-1)


t=time-1;

t;


3:求余数,c=a%b,c=a除以b剩下的余数


t=time-1;

a=0.5

t%a;



4:求余结果整体向上移动


t=time-1;

a=0.5

t%a+a;


5:再次求余,此时得到结果全部为正数。


t=time-1;

a=0.5;

(t%a+a)%a;


6:整理:将整体调整到0到1之间,方便使用。


t=time-1;

a=0.5;

((t%a+a)%a)/a;


整理:

function sawWave(t,cycle){

return ((t)%cycle+cycle)%cycle/cycle;   //by leizingyiu

}

sawWave(time,1)





三角波的产生:(前几个步骤与锯齿相似)

1:正比例函数


t=time-1;

t;


2:求余


t=time-1;

a=0.5

t%a;



3:整体向上移动


t=time-1;

a=0.5

t%a+a;



4:再次求余


t=time-1;

a=0.5;

(t%a+a)%a;


5:整体向下移动一半


t=time-1;

a=0.5;

(t%a+a)%a-a/2;


6:全部进行绝对值运算


t=time-1;

a=0.5;

Math.abs((t%a+a)%a-a/2);


7:调整到0到1之间


t=time-1;

a=0.5;

Math.abs((t%a+a)%a-a/2)/(a/2);


8:求与1的差,使t等于0的时候,输出0


t=time-1;

a=0.5;

1-Math.abs((t%a+a)%a-a/2)/(a/2);


整理:

function triWave(t,cycle){

return 1-Math.abs(( t%(cycle)+cycle)%(cycle)-cycle/2)/(cycle/2);   //by leizingyiu

}

triWave(time,1);


评论 ( 1 )
热度 ( 3 )

© leizingjiu | Powered by LOFTER