1

我很难用开放图表绘制三角形和锯齿波形。公式来自这篇文章的答案。这就是我对三角形的看法:

    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;
    }

这是一个在线演示

锯齿也差不多:

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;
}

是演示

有什么问题有什么想法吗?

4

1 回答 1

0

问题出在你的工作中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。取这个 abs 使它从 2 反弹到 0 到 2,然后减去 1 以获得漂亮的 -1 到 1 三角波。

我的小提琴也减少了 i 以使图表更明显。:)

编辑添加:

另一个问题的函数不起作用的原因是他在那里说他pos是一个从 0 到 1 的循环变量(尽管我觉得解释得不是很清楚)。

于 2012-09-03T09:48:10.643 回答