javascript - 分形树递归问题

标签 javascript recursion

我正在尝试重新编码,并认为在 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/

相关文章:

javascript - 具有 X 可编辑功能的单选按钮

javascript - CSS 模糊效果第一次耗时太长

c - 你如何在 C 中的 BST 中删除一个数字的多个实例?

java - 使用递归方法返回链表中具有最大值的对象

javascript - Chrome 扩展程序多个端口出现“断开连接的端口”错误

javascript - 正则表达式仅接受正数和小数(仅以 .5 .0 或可接受的整数结尾)

javascript - 上传完成后如何获取json结果?

java - 计算平方根的二进制搜索 (Java)

python-3.x - 如果条件,则返回语句在 python 中不起作用

查找所有不同的嵌套数组元素的 Javascript 最佳实践