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