我很难用打开的图表绘制三 Angular 形和锯齿波形状。公式来自the answer in this post 。 这就是我对三 Angular 形的理解:
var myArray = [];
var myVals = [];
var mytrin = [];
ti = 2.0 * Math.PI * (880 / 44100);
theta = 0;
for(i = 0; i <500; i++){
myArray.push(i);
var ke = value = (1.0 - Math.abs(theta - 0.5) * 4);
mytrin.push(ke);
theta = theta + ti;
}
这是一个online demo .
对于锯齿来说也是同样的事情:
var myArray = [];
var myVals = [];
var mytrin = [];
ti = 2.0 * Math.PI * (880 / 44100);
theta = 0;
for(i = 0; i <1000; i++){
myArray.push(i);
var ke = theta*2-1;
mytrin.push(ke);
theta = theta + ti;
}
有什么问题的想法吗?
最佳答案
问题出在你的锻炼ke
上。你有这个:
(1.0 - Math.abs(theta - 0.5) * 4)
当 theta = 0 时,结果为 -1。当 theta 达到 0.5 时,您将达到 1,但随着 theta 的增加,Math.abs(theta - 0.5)
将继续增加,因此 ke 将继续下降、下降、下降。
您想要做的是使用一些模块化算术将其保持在一定范围内。
我玩过并将其修改为:
1-Math.abs((theta%4)-2);
http://jsfiddle.net/chrisvenus/tMHR8/
它的作用是进行模数处理,使值变为 0-4,然后变为 0-4 并重复(一种锯齿波)。减去 2 使其重复 -2 到 +2。取其绝对值使其从 2 反弹到 0 到 2,然后减去 1 以获得漂亮的 -1 到 1 三 Angular 波。
我的 fiddle 也减少了 i 以使图表更明显。 :)
编辑添加:
另一个问题中的函数不起作用的原因是他在那里声明他的 pos 是一个从 0 到 1 的循环变量(尽管我觉得解释得不是很清楚) )。
关于javascript - 塑造三 Angular 波和锯齿波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245340/