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 になります。シータが 0.5 に達すると 1 になりますが、シータがそこから増加するにつれて増加しMath.abs(theta - 0.5)続けるため、ケは下降と下降を続けます。

あなたがしたいことは、モジュラ演算を少し使用して、境界範囲内に保つことです。

私はそれを再生して次のように変更しました:

1-Math.abs((theta%4)-2);

http://jsfiddle.net/chrisvenus/tMHR8/

これが行うことは、値が 0 ~ 4 になり、次に 0 ~ 4 になり、繰り返されるモジュラスを実行することです (ノコギリ歯の一種)。2 を引くと -2 から +2 を繰り返します。これを絶対値にすると、2 から 0 に跳ね返って 2 になり、1 を引いて -1 から 1 の素敵な三角波が得られます。

私のフィドルは i も削減して、グラフをより見やすくします。:)

編集して追加:

他の質問の関数が機能しない理由は、彼posが 0 から 1 までの循環変数であると述べているためです (ただし、非常に明確に説明されているとは思いません)。

于 2012-09-03T09:48:10.643 に答える