我是靠谱客的博主 悦耳玉米,最近开发中收集的这篇文章主要介绍Javascript递归绘制二叉树这幅图的代码应该是这样的,只改变了向左和向右的旋转角度,还有就是iter用来设置树的颜色,但是不知道为什么我的电脑里一直出不来这个图。有没有大佬能救命啊,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

<html>
    <head>
        <title>标准二叉树</title>
    </head>
    <body>
<!--        svg元素-->
        <svg id ="mySvg" width = 800 height = 600></svg>
        
        <script>
            //获取屏幕宽度
            var w = window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
            
            //获取屏幕高度
            var h = window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
            
            //设置变量mysvg获取svg元素
            var mysvg = document.getElementById("mySvg");
            
            //修改SVG的宽度
            mysvg.setAttribute("width",w*0.9);
            
            //修改SVG的高度
            mysvg.setAttribute("height",h*0.9);
       
            //起始长度
            var length = 200;
            
            //衰减系数
            var rate = 0.6;
            
            //第一截线段的起点为x0为屏幕一般,y0为屏幕底端
            var x0 = w/2;
            var y0 = h;
            
            //迭代次数
            var count = 7;
            
            //我没搞懂iter的作用是什么
            var iter = 0;
            
            //定义递归二叉树函数
            /*根据起点(x1,y1)和终点(x2,y2绘制一个线段,长度为length,然后将终点作为起点,并对直线旋转一个角度angle,把线段长度衰减一个系数rate,根据旋转角度和衰减系数,新的终点(x2,y2)可以通过计算得到。*/
            function show(x0,y0,length,rate,a,count){
                
//                var iter++;这行代码会使屏幕一片空白,更改为下面的形式后才有所显示

                var iter = iter + 1;
                
                //设置起点位置
                var x1 = x0;
                var y1 = y0;
                
                //设置终点,实际上我也不知道怎么算的
                var x2 = x1+length*Math.cos(a);
                var y2 = y1+length*Math.sin(a);
                
                //创建线段svgline的节点document.createElement("line"),课本里没有加上var。
                svgline = document.createElement("line");
                
                //mysvg的子节点为svgline
                mysvg.appendChild(svgline);
                

                svgline.outerHTML="<line x1="+x1+" y1="+y1+" x2="+x2+" y2="+y2+" style='stroke:rgb(99,99,99);stroke-width:2' />"
//                svgline.outerHTML="<line x1="+x1+" y1="+y1+" x2="+x2+" y2="+y2+" stroke=rgb(99,99,99) stroke-width="+count+" />";
                
                //向左和向右旋转的角度
                var aL = a - Math.PI/4;
                var aR = a + Math.PI/4;
                
                if(count>0){
                   
//                   我这里打少了一个变量rate,难怪没有出来树枝的变化
                   show(x2,y2,length*rate,rate,aL,count-1);
                    
                    show(x2,y2,length*rate,rate,aR,count-1);
                }
            }
            
            //调用递归二叉树函数
            show(x0,y0,length,rate,-Math.PI/2,count);
            
            
            
            
        </script>
    </body>
</html>

这幅图的代码应该是这样的,只改变了向左和向右的旋转角度,还有就是iter用来设置树的颜色,但是不知道为什么我的电脑里一直出不来这个图。有没有大佬能救命啊

<!DOCTYPE html> 
<html>
<!--在标准二叉树上为线段添加随机部分-->
    <head>
        <meta charset="UTF-8">
        <title>角度随机二叉树</title>
    </head>
    
    <body>
        <!--        svg元素-->
        <svg id ="mySvg" width = 800 height = 600></svg>
        
        <script>
            
            //获取屏幕宽度
            var w = window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
            
            //获取屏幕高度
            var h = window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
            
            //设置变量mysvg获取svg元素
            var mysvg = document.getElementById("mySvg");
            
            //修改SVG的宽度
            mysvg.setAttribute("width",w*0.9);
            
            //修改SVG的高度
            mysvg.setAttribute("height",h*0.9);
            
            //起始长度
            var length = 200;
            
            //衰减系数
            var rate = 0.6;
            
            //第一截线段的起点为x0为屏幕一般,y0为屏幕底端
            var x0 = w/2;
            var y0 = h;
            
            //迭代次数
            var count = 7;
            
            var iter = 0;
            
            //定义递归二叉树函数
            /*根据起点(x1,y1)和终点(x2,y2绘制一个线段,长度为length,然后将终点作为起点,并对直线旋转一个角度angle,把线段长度衰减一个系数rate,根据旋转角度和衰减系数,新的终点(x2,y2)可以通过计算得到。*/
            function show(x0,y0,length,rate,a,count){
                
                //var iter++;这行代码会使屏幕一片空白,更改为下面的形式后才有所显示
                var iter = iter + 1;
                
                var x1 = x0;
                var y1 = y0;
                
                var x2 = x1+length*(0.5+0.5*Math.random())*Math.cos(a);
                
                var y2 = y1+length*(0.5+0.5*Math.random())*Math.sin(a);
                
                
                //创建线段svgline的节点document.createElement("line"),课本里没有加上var。
                svgline = document.createElement("line");
                
                //mysvg的子节点为svgline
                mysvg.appendChild(svgline);
                
                svgline.outerHTML="<line x1="+x1+" y1="+y1+" x2="+x2+" y2="+y2+" style='stroke:rgb(0,"(+iter+)",0);stroke-width:"(+count+)"' />"
                
                var aL = a-Math.PI/4*(0.5+0.5*Math.random());
                
                var aR = a-Math.PI/4*(0.5+0.5*Math.random());
                
                if(count>0){
                    show(x2,y2,length*rate,rate,aL,count-1);
                    
                    show(x2,y2,length*rate,rate,aR,count-1);
                }
            }
            
            show(x0,y0,length,rate,-Math.PI/2,count);
        </script>
    </body>
</html>

 

最后

以上就是悦耳玉米为你收集整理的Javascript递归绘制二叉树这幅图的代码应该是这样的,只改变了向左和向右的旋转角度,还有就是iter用来设置树的颜色,但是不知道为什么我的电脑里一直出不来这个图。有没有大佬能救命啊的全部内容,希望文章能够帮你解决Javascript递归绘制二叉树这幅图的代码应该是这样的,只改变了向左和向右的旋转角度,还有就是iter用来设置树的颜色,但是不知道为什么我的电脑里一直出不来这个图。有没有大佬能救命啊所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部