【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函數庫

相關文章
相關標籤/搜索