三角波函数:
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);
© leizingjiu | Powered by LOFTER