【Python 16】分形树绘制4.0(利用递归函数绘制分形树fractal tree)

 1.案例描述html

树干为80,分叉角度为20,树枝长度小于5则中止。树枝长小于30,能够看成树叶了,树叶部分为绿色,其他为树干部分设为棕色。python

 

2.案例分析ide

因为分形树具备对称性,自类似性,因此咱们能够用递归来完成绘制。只要肯定开始树枝长、每层树枝的减短长度和树枝分叉的角度,咱们就能够把分形树画出来啦!! 函数

递归基本逻辑(原路返回):右侧树枝绘制递出处理+左侧树枝绘制递出处理+归来时处理(递出和归来两个模型结合)。最大优势是逻辑容易理解,最大缺点是重复操做较多易有性能问题。性能

3.分形几何学spa

客观事物具备自类似的层次结构,局部与总体在形态、功能、信息、时间、空间等方面具备统计意义上的类似性,称为自类似性。自类似性是指局部是总体成比例缩小的性质。.net

4.上机实验一(普通分形树)code

""" 做者:梁斌 功能:利用递归函数绘制分形树 版本:1.0 日期:03/08/2017 """
import turtle def draw_branch(branch_length): """ 绘制分形树 """
    if branch_length > 5: # 绘制右侧树枝
 turtle.forward(branch_length) print('向前 ', branch_length) turtle.right(20) print('右转 20') draw_branch(branch_length - 15) # 绘制左侧树枝
        turtle.left(40) print('左转 40') draw_branch(branch_length - 15) # 返回以前的树枝
        turtle.right(20) print('右转 20') turtle.backward(branch_length) print('向后 ', branch_length) def main(): """ 主函数 """ turtle.left(90) turtle.penup() turtle.backward(150) turtle.pendown() turtle.color('brown') draw_branch(80) turtle.exitonclick() if __name__ == '__main__': main()

5.上机实验二(树枝带颜色分形树)htm

# -*- coding: utf-8 -*-
''' 绘制分形树 '''

import turtle as tl def draw_smalltree(tree_length,tree_angle,tree_wide): ''' 绘制分形树函数 '''
    if tree_length >= 5: tl.pensize(tree_wide) tl.forward(tree_length) #往前画
        tl.right(tree_angle)  #往右转
        draw_smalltree(tree_length - 10,tree_angle,tree_wide*2/3)#画下一枝,直到画到树枝长小于3
 tl.left(2 * tree_angle)  #转向画左
        draw_smalltree(tree_length -10,tree_angle,tree_wide*2/3) #直到画到树枝长小于3
 tl.rt(tree_angle) #转到正向上的方向,而后回溯到上一层
        if tree_length <= 30:  #树枝长小于30,能够看成树叶了,树叶部分为绿色
            tl.pencolor('green') if tree_length > 30: tl.pencolor('brown')  #树干部分为棕色
 tl.pensize(tree_wide) tl.backward(tree_length) #往回画,回溯到上一层


def main(): tl.screensize(100, 100, "black")  #画布大小
 tl.penup() tl.left(90)  #由于树是往上的,因此先把方向转左
    tl.backward(250) #把起点放到底部
 tl.pendown() tl.pencolor('brown') tl.speed(10) tree_length = 80  #我设置的最长树干为80
    tree_angle = 20  #树枝分叉角度,我设为20
    tree_wide =  5   #树枝粗度
 draw_smalltree(tree_length,tree_angle,tree_wide) tl.exitonclick() #点击才关闭画画窗口

if __name__ == '__main__': main()

参考文档:blog

用python的turtle画分形树

Turtle函数库

相关文章
相关标签/搜索