我一直试图用P5.js创建一个简单的分形树程序,用于在网站上显示,但我似乎得到了意想不到的行为.代码和图片附上.
function setup() {
createCanvas(1920, 1080);
}
function draw() {
background(10);
x = 1920/2
y = 1080/2
fractalDraw(x, y, 5, 0)
}
function fractalDraw(nodeX, nodeY, numNodes, sideFlag){
offset = 10 * numNodes
leftNodeX = nodeX - offset
rightNodeX = nodeX + offset
topNodeY = nodeY - offset
botNodeY = nodeY + offset
if(sideFlag === -1){ //Leftside draw
line(nodeX, nodeY, leftNodeX, topNodeY)
stroke(255,255,255)
line(nodeX, nodeY, leftNodeX, botNodeY)
stroke(255,255,255);
}
else if(sideFlag === 1){ //Rightside draw
line(nodeX, nodeY, rightNodeX, topNodeY)
stroke(255,255,255);
line(nodeX, nodeY, rightNodeX, botNodeY)
stroke(255,255,255);
}
else{ //Starting draw
line(nodeX, nodeY, leftNodeX, topNodeY)
stroke(255,255,255)
line(nodeX, nodeY, leftNodeX, botNodeY)
stroke(255,255,255);
line(nodeX, nodeY, rightNodeX, topNodeY)
stroke(255,255,255);
line(nodeX, nodeY, rightNodeX, botNodeY)
stroke(255,255,255);
}
if(numNodes === 1){ //Recursion Base Case
return 1
}
else{ //Recursive calls
fractalDraw(leftNodeX, topNodeY, numNodes-1, -1)
fractalDraw(leftNodeX, botNodeY, numNodes-1, -1)
fractalDraw(rightNodeX, topNodeY, numNodes-1, 1)
fractalDraw(rightNodeX, botNodeY, numNodes-1, 1)
}
}
我正在使用递归调用,似乎只有我的第一个递归调用正在运行,一旦第一个(也只是第一个)递归调用结束,整个绘制循环就会在不同的开始位置重新启动.当我使用少量的分支层(3个或更少)时,我也有一些奇怪的行为.