人工智慧學習聯盟免費課程 案例二 繪製分形樹

2021-09-12 19:38:15 字數 2860 閱讀 5967

本案例的學習要借助turtle庫,這是乙個畫筆庫。它的座標定義如下:

首先是簡單的利用迴圈繪製多個五角星。

def draw_pentagram(size) :

count = 1

while count <=5:

turtle.forward(size)

turtle.right(144)

count += 1

colors = ['red','green','black','blue','yellow','purple']

size = 50

while size <= 100:

i = size//10 - 5

turtle.color(colors[i])

draw_pentagram(size)

size += 10

turtle.exitonclick()

turtle.exitonclick()是用來結束繪製框的,如果不加這一句將導致崩潰。

我在老師的基礎上,新增了顏色變數,每乙個五角星都是乙個不同的顏色,利用列表實現。

迴圈是每一次你給函式乙個引數,再呼叫函式來實現你的目標;而遞迴則是在其內部完成引數的更新。

def draw_recursive_pentagram(size = 50,maxsize = 100) :

#依舊是繪製乙個五角星的迴圈

count = 1

while count <= 5:

turtle.fd(size)

turtle.rt(144)

count += 1

#繪製完成之後開始自身迭代

size += 10

#迭代結束的條件一定要設定好,不然就是死迴圈

if size <= maxsize :

draw_recursive_pentagram(size,maxsize)

在這裡,我比老師多設定了乙個maxsize引數來控制繪製的五角星的最大邊。

遞迴函式(或者說迭代函式)是在其定義的函式內部自己再次呼叫自己,從而實現引數的更新。

def fractal_tree(branch_length) :

if branch_length >= 5:

# 繪製右側樹枝

turtle.fd(branch_length)

turtle.rt(20)

if branch_length < 20 :

turtle.color('green')

fractal_tree(branch_length - 15)

# 繪製左側樹枝

turtle.lt(40)

if branch_length < 20 :

turtle.color('green')

fractal_tree(branch_length - 15)

# 返回上個節點

if branch_length > 20 :

turtle.color('brown')

turtle.rt(20)

turtle.bk(branch_length)

先來看顏色,我設定的是當枝的長度小於等於15時,我認為它是葉,即將最後一級看作葉(因為步長是15)。然後在返回上級節點時,將顏色變更為棕色,從而實現枝的繪製。

下面就是很燒腦的迭代問題。

我理解的是按照**的順序依次執行。

假設長度初始值為40,由起點(第一級節點)前進40(到達二級節點),右轉20,這時進入迭代函式,長度為25,由二級節點,前進20(到達**節點),右轉20,這時(記為狀態1)再一次進入迭代函式,長度為10,由**節點,前進5(到達四級節點),右轉20,這時(記為狀態2)又一次進入迭代函式,長度為-5,不滿足if條件,退出該迭代。

**繼續,這時是狀態2,即進行fractal_tree(10 - 15)的下一行**,turtle.lt(40),由右轉20的狀態變成左轉20的狀態,,然後下一行fractal_tree(10 - 15)依舊不能執行,再下一行,即返回上個節點的turtle.rt(20),由左轉20的狀態變成正向的狀態,向後後退10,來到**節點。

這個時候fractal_tree(25 - 15)的迭代結束了,繼續狀態1的下一行,turtle.lt(40),由右轉20的狀態變成左轉20的狀態,,然後下一行fractal_tree(25 - 15)開始迭代。由**節點,前進10(到達四級節點),右轉20,這時(記為狀態3)又一次進入迭代函式,長度為-5,不滿足if條件,退出該迭代。返回上個節點的turtle.rt(20),由左轉20的狀態變成正向的狀態,向後後退10,再次回到**節點。

之後迴圈往復,只到最終又回到一級節點。

示意圖如下:

到此對迭代函式的工作原理就理解的差不多了。

下面就是繪製分形樹了。

#先將畫筆的方向調整好

turtle.left(90)

#將中心點位置調整好

turtle.penup()

turtle.bk(100)

turtle.pendown()

#引用函式進行繪圖

完結撒花!✿✿ヽ(゚▽゚)ノ✿

人工智慧學習聯盟免費課程 案例四 52周存錢挑戰

忽然發現可以直接jupyter轉成html然後再轉成pdf儲存到網盤,以後部落格就放棄寫作咯 52周存錢挑戰的目的是,根據你輸入的起始存錢金額,每週遞增金額,和目標週數,計算你在每一周所需要存入的數目,在該周的累計總存入金額等。本案例依舊是對前面使用的迴圈的複習,並且新增了一些新的內容。乙個是有使用...

人工智慧學習聯盟免費課程 案例五 判斷第幾天

通過不同的資料儲存型別來實現同乙個功能,元組 列表 集合和字典。from datetime import datetimedef is leap year year 判斷是否為閏年 is leap false if year 2 0 year 2 0 year 2 0 is leap true re...

人工智慧課程方案

對於企業來說,隨著人工智慧的逐步滲透,企業的經營管理也將面臨著較大的變化和挑戰,也會迎來自身的轉型和發展。鑑於此,我們將在概述人工智慧和企業管理內涵的基礎上,格物斯坦認為 基於人工智慧在現代企業管理中的運用的分析,詳細闡述人工智慧對於現代企業管理的挑戰。現代的人工智慧可以找出對應的模式,然後對物件進...