塑造三角形和锯齿波

时间:2012-09-03 09:38:03

标签: javascript math geometry wave

我很难用开放式图表绘制三角形和锯齿波形状。公式来自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;
}

here's the demo

有什么错误的想法?

1 个答案:

答案 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>