2017-11-08 4 views
1

私はエラーに固執していますタイトルに記載されている問題について解決できません。Levy C曲線のJavascript再帰的実装

私のアルゴリズムは次のようになります。非常に重くウィキペディアのページに示す実装に基づいています

function levyCCurve(x,y, len, angle, points,order){ 
    fx = x 
    fy = y 
    length = len 
    alpha = angle 
    it_n = order 
    if(it_n > 0){ 
    length = length/Math.sqrt(2) 

    levyCCurve(fx,fy,length,alpha+45,points, it_n - 1); 
    fx = fx + (length * Math.cos((angle + 45)/180*Math.PI)) 
    fy = fy + (length * Math.sin((angle + 45)/180*Math.PI)) 
    levyCCurve(fx,fy,length,angle-45,points,it_n - 1); 

    } else { 
    points.push([fx,fy,fx + (length*Math.cos(angle/180*Math.PI)),fy+ (length*Math.sin(angle/180*Math.PI))]) 

    } 

    } 

。私も自分の実装に誤りがあったので、ウィキペディアに表示されたものをすばやく行うことに決めましたが、今ではこれもうまくいきません。

例:

[500、500、600、500]

[500、500、550、550]

:私はこのlevyCCurve(500,500,100,0,pointsArray,2)のような機能を起動した場合、私は以下の点を取得します[550、550、600、500]

[500、500、500、550]

[500、550、550、550]

[535.3553390593273、585.3553390593273、570.7106781186546、550]

明確に最後の点が間違っていると、なぜ私は、誰かが私が間違っているところだと指摘することができれば素晴らしいだろう、得ることはありません!

答えて

1

可変スコープで問題が発生しました。これは、JavaScriptのような新しいものであればかなり難しいです。

letでメソッドの先頭に変数を定義すると、実際の呼び出しでのみ定義されます。

関連する問題