我遇到了一个错误,我无法解决标题中提到的问题。
我的算法看起来如下:
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]
显然最后一点是错误的,我不明白为什么,如果有人能指出我错在哪里,那就太棒了!
答案 0 :(得分:1)
是一个可变范围的问题,如果你是像我这样的javascript新手,那就太难了。
当您使用let
在方法开头定义变量时,它会起作用,因此它们仅在实际调用中定义。