gpt4 book ai didi

javascript - 分形树递归问题

转载 作者:行者123 更新时间:2023-12-01 01:39:42 24 4
gpt4 key购买 nike

我正在尝试重新编码,并认为在 js 中编写一个快速的小分形树会有所帮助,但我显然做错了一些事情。下面是我的代码,后面是一个非常相似的代码,我发现它基本上使用相同的逻辑。我的代码一直在工作,直到我添加了带有负 Angular 第二次draw()调用,以便树也生长在左侧。我很想知道为什么第二个调用会破坏递归。

提前谢谢

我的代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>fractal tree</title>
<style>
#myCanvas{
border:1px solid black;
}
</style>
<script>
var x =0;
var y =0;
var startx;
var starty;
var length;
var pi = Math.PI;
var ang = pi/4;
var ctx;
var canvas;
window.onload = function setup(){
canvas = document.getElementById("myCanvas");
startx = canvas.width/2;
starty = canvas.height;
length = 300;
ctx = canvas.getContext("2d");
ctx.translate(startx,starty);
draw(ctx,startx,starty,length,ang);
}
function draw(ctx,x,y,length,angle) {
if(length < 1){
return;
}
ctx.moveTo(0,0);
ctx.lineTo(0, -length);
ctx.stroke();
ctx.translate(0,-length);
ctx.rotate(angle);
draw(ctx,x,y,length*.67,angle);
draw(ctx,x,y,length*.67,-angle);
}
</script>
</head>

<body>
<canvas id="myCanvas" width="800px" height="600px">

</canvas>
</body>
</html>

我发现的其他代码(确实有效)

function draw(startX, startY, len, angle) {
ctx.beginPath();
ctx.save();

ctx.translate(startX, startY);
ctx.rotate(angle * Math.PI/180);
ctx.moveTo(0, 0);
ctx.lineTo(0, -len);
ctx.stroke();

if(len < 10) {
ctx.restore();
return;
}

draw(0, -len, len*0.8, -15);
draw(0, -len, len*0.8, 15);

ctx.restore();
}

最佳答案

它没有坏,只是花了很长时间。请注意,为了绘制“另一侧相同的东西”,您需要在 onload 中重复 draw 调用。通过在 draw 调用中重复 draw 调用,您增加了分形维数,制作了一种截然不同的绘图,并以指数方式增加了绘图时间。

关于javascript - 分形树递归问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52528642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com