我很难用开放式图表绘制三角形和锯齿波形状。公式来自the answer in this post。 这就是我对三角形的看法:
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;
}
有什么错误的想法?
答案 0 :(得分:0)
问题出在你ke
的工作中。你有这个:
(1.0 - Math.abs(theta - 0.5) * 4)
在theta = 0时,这将给出-1。当θ达到0.5时,你会达到一个,但随着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。取这个abs使它从2反弹到0到2然后减去1得到漂亮的-1到1三角波。
我的小提琴减少了我也使图表更加明显。 :)
编辑以添加:
其他问题的功能不起作用的原因是他在那里指出他的pos
是从0到1的圆柱变量(虽然我觉得它没有被非常清楚地解释)。 / p>