整形三角形和锯齿波

shaping triangle and sawtooth wave

本文关键字:三角形      更新时间:2023-09-26

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

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

这是演示。

有什么问题吗?

问题出在ke之外。你有这个:

(1.0 - Math.abs(theta - 0.5) * 4)

在θ=0时,这将得到-1。当θ达到0.5时,你会得到1,但随着θ的增加,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的三角形波。

我的小提琴也降低了我的音量,使图表更清晰可见。:)

编辑以添加:

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