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