插圖工具使用Python內(nèi)置的turtle模塊,為什么叫這個(gè)turtle烏龜這個(gè)名字呢,可以這樣理解,創(chuàng)建一個(gè)烏龜,烏龜能前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn),烏龜?shù)奈舶统拢苿?dòng)時(shí)就會(huì)畫一條線。并且為了增加烏龜畫圖的藝術(shù)價(jià)值,可以改變尾巴寬度和尾巴浸入墨水的顏色。
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°(因?yàn)樾枰窒倚D(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.繪制謝爾賓斯基三角形
謝爾賓斯基三角形使用了三路遞歸算法,從一個(gè)大三角形開始,通過連接每一個(gè)邊的中點(diǎn),將大三角型分為四個(gè)三角形,然后忽略中間的三角形,依次對其余三個(gè)三角形執(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繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
