前言
粉色系最?lèi)?ài)!Python櫻花樹(shù)等你獲取~
哈嘍小伙伴們好久不見(jiàn)啦,最近櫻花開(kāi)得好美吖,博主想和大家一起分享春天的快樂(lè),一起來(lái)看看博主畫(huà)的櫻花樹(shù)吧!
一、Turtle基礎(chǔ)
老生常談啦,在用python畫(huà)櫻花樹(shù)前,我們先來(lái)了解一下turtle吧!
小海龜(Turtle)是Python中畫(huà)圖的一個(gè)重要的包(內(nèi)置包),里面包含豐富的畫(huà)圖工具以及畫(huà)圖的各種功能,當(dāng)你學(xué)會(huì)了用Turtle畫(huà)圖后,你可以畫(huà)任何你想畫(huà)的圖案哦。
1.1 Turtle畫(huà)板
Turtle的畫(huà)板大小可以用turtle.screensize()函數(shù)來(lái)設(shè)置
turtle.screensize(width,height,bg)
設(shè)置畫(huà)板的大小,包含寬和高,width為寬,height為高,bg為畫(huà)布顏色
1.2 Turtle畫(huà)筆
Turtle的畫(huà)筆有幾個(gè)常用的函數(shù):
①turtle.penup():抬起畫(huà)筆,此時(shí)移動(dòng)畫(huà)筆不會(huì)在畫(huà)布上留下痕跡哦
②turtle.pendown():放下畫(huà)筆,與turtle.penup相對(duì)應(yīng),放下畫(huà)筆后就可以繼續(xù)畫(huà)畫(huà)了(放下畫(huà)筆后畫(huà)畫(huà)會(huì)在畫(huà)布上留下痕跡)
③turtle.pensize():控制畫(huà)筆的大?。梢愿鶕?jù)需求自行定義畫(huà)筆的大小哦)
④turtle.pencolor():控制畫(huà)筆的顏色(可以自己在網(wǎng)上查閱所有python可以使用的顏色,python里面可以用的顏色有很多的哦)
⑤turtle.hideturtle():隱藏畫(huà)筆(隱藏畫(huà)筆以后畫(huà)圖時(shí)畫(huà)筆就看不到了)
1.3 Turtle畫(huà)圖
在畫(huà)圖的過(guò)程中,我們經(jīng)常要使用一些簡(jiǎn)單的移動(dòng)函數(shù):
①turtle.forward(x):將畫(huà)筆向前移動(dòng)x個(gè)像素(x可以理解為距離)
②turtle.backward(x):將畫(huà)筆向后退x個(gè)像素(x可以理解為距離)
③turtle.left(n):將畫(huà)筆向左旋轉(zhuǎn)n度
④turtle.right(n):將畫(huà)筆向右旋轉(zhuǎn)n度
⑤turtle.speed():設(shè)置畫(huà)筆畫(huà)圖的速度(1~10遞增,0最快)
1.4 Turtle填色
在畫(huà)好圖后,我們經(jīng)常需要對(duì)其進(jìn)行填色,這里可以用turtle.fillcolor()函數(shù),括號(hào)里寫(xiě)入你想填充的顏色即可。
在使用turtle.fillcolor()函數(shù)要注意其基本格式:
turtle.beginfill() #開(kāi)始填充
turtle.fillcolor() #輸入填充的顏色
turtle.endfill() #結(jié)束填充
1.5 Turtle寫(xiě)字
在完成整個(gè)畫(huà)圖后,我們可以使用turtle.write()函數(shù)進(jìn)行寫(xiě)字
turtle.write(" ",move,align,font)
① 第一個(gè)位置雙引號(hào)內(nèi)填入要寫(xiě)的字
② move(可選):在默認(rèn)情況下,move為false。如果move為true,則筆將移動(dòng)到右下角
③ align(可選):可取值是left即左、center即中、right即右之一,是字符串格式
④ font(可選):字體三元組(fontname、fontsize、fonttype),fontname即字體名稱(chēng)(字符串格式,如“宋體”),fontsize即字體大?。琭onttype即字體類(lèi)型如:normal(普通)、bold(粗體)、italic(斜體)
二、Python櫻花樹(shù)
簡(jiǎn)單的了解turtle小海龜后,我們就可以步入今天的主題啦!
2.1 櫻花類(lèi)
既然是櫻花樹(shù),那肯定要畫(huà)櫻花啦,在這里我選擇了五片花瓣的櫻花
def flower():
tu.hideturtle()
tu.pensize(2)
tu.pencolor("pink")
flowersize = ra.randint(1,5)
for j in range(5):
tu.forward(int(flowersize))
tu.backward(int(flowersize))
tu.right(72)
2.2 櫻花樹(shù)
櫻花畫(huà)好后,我們就可以遞歸畫(huà)樹(shù)啦
def tree(n,k):
tu.pendown()
tu.pencolor("black")
tu.pensize(n/4)
tu.forward(k)
if n>0:
r=ra.random()*10+10
l=ra.random()*10+10
x=k*(ra.random()*0.25+0.7)
tu.right(r)
tree(n-1,x)
tu.left(l+r)
tree(n-1, x)
tu.right(l)
else:
tu.right(90)
flower()
tu.left(90)
tu.pu()
t=tu.heading()
s=-ra.random()
tu.setheading(s)
x=ra.randint(1,5)
tu.forward(x)
tu.setheading(t)
tu.pd()
tu.right(90)
flower()
tu.left(90)
tu.pu()
t=tu.heading()
tu.setheading(s)
tu.backward(x)
tu.setheading(t)
tu.penup()
tu.backward(k)
2.3 主函數(shù)
最后,我們需要一個(gè)主函數(shù)來(lái)實(shí)現(xiàn)櫻花樹(shù)
tu.setup(800,480)
tu.bgcolor("lavenderblush")
tu.hideturtle()
tu.tracer(0)
tu.penup()
tu.goto(0,-150)
tu.pendown()
tu.left(90)
tree(12,50)
for i in range(99):
tu.penup()
tu.goto(ra.randint(-150,150),ra.randint(-150,0))
tu.pendown()
flower()
2.4 程序分析
讓我們具體分析一下櫻花樹(shù)的代碼吧!
1、導(dǎo)入turtle和random庫(kù)
import turtle as tu
import random as ra
在代碼中使用了turtle庫(kù)進(jìn)行繪圖,以及random庫(kù)隨機(jī)生成數(shù)值。
2、定義flower函數(shù)
def flower():
tu.hideturtle()
tu.pensize(2)
tu.pencolor("pink")
flowersize = ra.randint(1,5)
for j in range(5):
tu.forward(int(flowersize))
tu.backward(int(flowersize))
tu.right(72)
flower函數(shù)用于畫(huà)出一個(gè)花朵。首先,將turtle隱藏、設(shè)置筆尺寸和顏色。然后用隨機(jī)數(shù)生成花朵的大小,并循環(huán)繪制5個(gè)花瓣。
3、定義tree函數(shù)
def tree(n,k):
tu.pendown()
tu.pencolor("black")
tu.pensize(n/4)
tu.forward(k)
if n>0:
r=ra.random()*10+10
l=ra.random()*10+10
x=k*(ra.random()*0.25+0.7)
tu.right(r)
tree(n-1,x)
tu.left(l+r)
tree(n-1, x)
tu.right(l)
else:
tu.right(90)
flower()
tu.left(90)
tu.pu()
t=tu.heading()
s=-ra.random()
tu.setheading(s)
x=ra.randint(1,5)
tu.forward(x)
tu.setheading(t)
tu.pd()
tu.right(90)
flower()
tu.left(90)
tu.pu()
t=tu.heading()
tu.setheading(s)
tu.backward(x)
tu.setheading(t)
tu.penup()
tu.backward(k)
tree函數(shù)用于畫(huà)出一棵樹(shù)。參數(shù)n表示樹(shù)干的級(jí)數(shù),k表示樹(shù)干的長(zhǎng)度。在函數(shù)中,先將turtle設(shè)置為下筆狀態(tài)、設(shè)置顏色和筆尺寸,并繪制樹(shù)干。如果n>0,則用隨機(jī)數(shù)生成分支的角度、長(zhǎng)度和隨機(jī)縮放系數(shù),然后右轉(zhuǎn)角度r,遞歸調(diào)用tree函數(shù)繪制右側(cè)分支,左轉(zhuǎn)角度l+r,遞歸調(diào)用tree函數(shù)繪制左側(cè)分支,最后右轉(zhuǎn)角度l還原角度。若n=0,代表樹(shù)干到頂了,需要繪制花瓣。繪制兩個(gè)花朵,之間的距離和之后后退的距離通過(guò)隨機(jī)數(shù)生成。之后將turtle設(shè)置為抬筆狀態(tài),退回樹(shù)干的起始位置,以準(zhǔn)備繪制另一棵樹(shù)。
4、設(shè)置畫(huà)布
tu.setup(800,480)
tu.bgcolor("lavenderblush")
tu.hideturtle()
tu.tracer(0)
這段代碼對(duì)畫(huà)布進(jìn)行初始化設(shè)置,包括畫(huà)布的大小、背景顏色,以及turtle的初始狀態(tài)和繪圖速度。
5、繪制樹(shù)和花朵
tu.penup()
tu.goto(0,-150)
tu.pendown()
tu.left(90)
tree(12,50)
for i in range(99):
tu.penup()
tu.goto(ra.randint(-150,150),ra.randint(-150,0))
tu.pendown()
flower()
這段代碼調(diào)用了tree函數(shù)來(lái)繪制一棵12級(jí)的樹(shù),以及其中的花朵。之后,繪制99個(gè)隨機(jī)位置和大小的花朵。
6、完成繪圖
tu.done()
最后用done函數(shù)表示繪圖結(jié)束。
2.5 櫻花林
一棵櫻花樹(shù)怎么夠呢,合理運(yùn)用循環(huán)語(yǔ)句,準(zhǔn)備一場(chǎng)櫻花林送給她吧!
for i in range(20):
tu.penup()
tu.goto(ra.randint(-300,300),ra.randint(-150,0))
tu.pendown()
tu.left(90)
tree(8,30)
tu.setheading(0)
……
尾聲
小伙伴們?cè)蹅兿缕谝?jiàn)喔!