Jvy递归实现Levy C Curve

时间:2017-11-08 13:54:54

标签: javascript algorithm recursion

我遇到了一个错误,我无法解决标题中提到的问题。

我的算法看起来如下:

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))])

    }

  }

这非常基于维基百科页面上显示的实现。我有自己的实现,也有错误,因此决定快速做维基百科上显示的那个,但现在这个也没有用。

示例:如果我启动此功能levyCCurve(500,500,100,0,pointsArray,2),我会得到以下几点:

[500,500,600,500]

[500,500,550,550]

[550,550,600,500]

[500,500,500,550]

[500,550,550,550]

[535.3553390593273,585.3553390593273,570.7106781186546,550]

显然最后一点是错误的,我不明白为什么,如果有人能指出我错在哪里,那就太棒了!

1 个答案:

答案 0 :(得分:1)

是一个可变范围的问题,如果你是像我这样的javascript新手,那就太难了。

当您使用let在方法开头定义变量时,它会起作用,因此它们仅在实际调用中定义。