python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形)
插圖工具使用Python內(nèi)置的turtle模塊,為什么叫這個turtle烏龜這個名字呢,可以這樣理解,創(chuàng)建一個烏龜,烏龜能前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn),烏龜?shù)奈舶统拢苿訒r就會畫一條線。并且為了增加烏龜畫圖的藝術(shù)價值,可以改變尾巴寬度和尾巴浸入墨水的顏色。
1.遞歸繪制螺旋
先用我們讓烏龜以line_len長度前進(jìn),然后向右旋轉(zhuǎn)90°,然后縮短line_len長度遞歸調(diào)用draw_spiral函數(shù)
import turtle
my_turtle = turtle.Turtle()
my_win = turtle.Screen()
def draw_spiral(tur, line_len):
if line_len > 0:
my_turtle.forward(line_len)
my_turtle.right(90)
draw_spiral(tur, line_len - 1)
draw_spiral(my_turtle, 100)
my_win.exitonclick()

2.遞歸繪制二叉樹
首先繪制branch_length長度的主干枝條,然后向右旋轉(zhuǎn)20°,遞歸調(diào)用draw_tree繪制主干枝條上的右分支,之后再向左旋轉(zhuǎn)40°(因為需要抵消右旋轉(zhuǎn)的20°),遞歸調(diào)用draw_tree繪制主干枝條的左分支,然后再向右旋轉(zhuǎn)20°,原路返回。
import turtle
my_tree = turtle.Turtle()
my_win = turtle.Screen()
def draw_tree(branch_length, t):
if branch_length > 5:
t.forward(branch_length)
t.right(20)
draw_tree(branch_length-20, t)
t.left(40)
draw_tree(branch_length-20, t)
t.right(20)
t.backward(branch_length)
my_tree.left(90)
my_tree.up() # 抬起尾巴
my_tree.backward(200)
my_tree.down() # 放下尾巴
my_tree.color('green')
draw_tree(100, my_tree)
my_win.exitonclick()

3.繪制謝爾賓斯基三角形
謝爾賓斯基三角形使用了三路遞歸算法,從一個大三角形開始,通過連接每一個邊的中點,將大三角型分為四個三角形,然后忽略中間的三角形,依次對其余三個三角形執(zhí)行上述操作。
import turtle
def draw_triangle(points, color, my_angle):
my_angle.fillcolor(color)
my_angle.up()
my_angle.goto(points[0][0], points[0][1])
my_angle.down()
my_angle.begin_fill()
my_angle.goto(points[1][0], points[1][1])
my_angle.goto(points[2][0], points[2][1])
my_angle.goto(points[0][0], points[0][1])
my_angle.end_fill()
def get_mid(p1, p2):
return ((p1[0]+p2[0])/2, (p1[1]+p2[1])/2)
def sierpinski(points, degree, my_angle):
colormap = ['blue', 'red', 'green', 'yellow',
'violet', 'orange', 'white']
draw_triangle(points, colormap[degree], my_angle)
if degree > 0:
sierpinski([points[0],
get_mid(points[0], points[1]),
get_mid(points[0], points[2])],
degree - 1, my_angle)
sierpinski([points[1],
get_mid(points[0], points[1]),
get_mid(points[1], points[2])],
degree - 1, my_angle)
sierpinski([points[2],
get_mid(points[2], points[1]),
get_mid(points[0], points[2])],
degree - 1, my_angle)
my_turtle = turtle.Turtle()
my_win = turtle.Screen()
my_points = [[-100, -50], [0, 100], [100, -50]]
sierpinski(my_points, 3, my_turtle)
my_win.exitonclick()

總結(jié)
以上所述是小編給大家介紹的python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Anaconda中導(dǎo)出環(huán)境的實現(xiàn)步驟
在 Anaconda 中導(dǎo)出環(huán)境是一種常用的做法,可以將當(dāng)前的環(huán)境配置導(dǎo)出到一個文件中,本文主要介紹了Anaconda中導(dǎo)出環(huán)境的實現(xiàn)步驟,具有一定的參考價值2024-05-05
python字典與json轉(zhuǎn)換的方法總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于python字典與json轉(zhuǎn)換的方法總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2020-12-12
Python3.7將普通圖片(png)轉(zhuǎn)換為SVG圖片格式(網(wǎng)站logo圖標(biāo))動起來
這篇文章主要介紹了Python3.7將普通圖片(png)轉(zhuǎn)換為SVG圖片格式并且讓你的網(wǎng)站Logo(圖標(biāo))從此”動”起來,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
使用Python實現(xiàn)Oracle數(shù)據(jù)庫自動巡檢程序
這篇文章主要為大家詳細(xì)介紹了如何創(chuàng)建一個Oracle數(shù)據(jù)庫自動巡檢程序,以確保數(shù)據(jù)庫的順暢運(yùn)行,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
Python中使用Counter進(jìn)行字典創(chuàng)建以及key數(shù)量統(tǒng)計的方法
今天小編就為大家分享一篇Python中使用Counter進(jìn)行字典創(chuàng)建以及key數(shù)量統(tǒng)計的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
使用Python paramiko模塊利用多線程實現(xiàn)ssh并發(fā)執(zhí)行操作
ssh是一個協(xié)議,OpenSSH是其中一個開源實現(xiàn),paramiko是Python的一個庫,實現(xiàn)了SSHv2協(xié)議(底層使用cryptography)。這篇文章主要介紹了使用Python paramiko模塊利用多線程實現(xiàn)ssh并發(fā)執(zhí)行操作,需要的朋友可以參考下2019-12-12
python+opencv實現(xiàn)文字顏色識別與標(biāo)定功能
最近小編接了一個比較簡單的圖像處理的單子,今天小編給大家分享python+opencv實現(xiàn)文字顏色識別與標(biāo)定功能的完整思路及代碼,感興趣的朋友一起看看吧2021-09-09

