Python——畫一棵漂亮的櫻花樹(不同種櫻花+玫瑰+圣誕樹喔)

最近翻到一篇知乎,上面有不少用Python(大多是turtle庫)繪制的樹圖藏杖,感覺很漂亮懂盐,我整理了一下,挑了一些我覺得不錯的代碼分享給大家(這些我都測試過跛蛋,確實可以生成喔~)

one 櫻花樹

動態(tài)生成櫻花

效果圖(這個是動態(tài)的):

動態(tài)生成櫻花


實現(xiàn)代碼

import turtle as T

import random

import time

# 畫櫻花的軀干(60,t)

def Tree(branch, t):

? ? time.sleep(0.0005)

? ? if branch > 3:

? ? ? ? if 8 <= branch <= 12:

? ? ? ? ? ? if random.randint(0, 2) == 0:

? ? ? ? ? ? ? ? t.color('snow')? # 白

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? t.color('lightcoral')? # 淡珊瑚色

? ? ? ? ? ? t.pensize(branch / 3)

? ? ? ? elif branch < 8:

? ? ? ? ? ? if random.randint(0, 1) == 0:

? ? ? ? ? ? ? ? t.color('snow')

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? t.color('lightcoral')? # 淡珊瑚色

? ? ? ? ? ? t.pensize(branch / 2)

? ? ? ? else:

? ? ? ? ? ? t.color('sienna')? # 赭(zhě)色

? ? ? ? ? ? t.pensize(branch / 10)? # 6

? ? ? ? t.forward(branch)

? ? ? ? a = 1.5 * random.random()

? ? ? ? t.right(20 * a)

? ? ? ? b = 1.5 * random.random()

? ? ? ? Tree(branch - 10 * b, t)

? ? ? ? t.left(40 * a)

? ? ? ? Tree(branch - 10 * b, t)

? ? ? ? t.right(20 * a)

? ? ? ? t.up()

? ? ? ? t.backward(branch)

? ? ? ? t.down()

# 掉落的花瓣

def Petal(m, t):

? ? for i in range(m):

? ? ? ? a = 200 - 400 * random.random()

? ? ? ? b = 10 - 20 * random.random()

? ? ? ? t.up()

? ? ? ? t.forward(b)

? ? ? ? t.left(90)

? ? ? ? t.forward(a)

? ? ? ? t.down()

? ? ? ? t.color('lightcoral')? # 淡珊瑚色

? ? ? ? t.circle(1)

? ? ? ? t.up()

? ? ? ? t.backward(a)

? ? ? ? t.right(90)

? ? ? ? t.backward(b)

# 繪圖區(qū)域

t = T.Turtle()

# 畫布大小

w = T.Screen()

t.hideturtle()? # 隱藏畫筆

t.getscreen().tracer(5, 0)

w.screensize(bg='wheat')? # wheat小麥

t.left(90)

t.up()

t.backward(150)

t.down()

t.color('sienna')

# 畫櫻花的軀干

Tree(60, t)

# 掉落的花瓣

Petal(200, t)

w.exitonclick()

飄落效果

效果圖:

飄落效果

代碼:

from turtle import *

from random import *

from math import *

def tree(n,l):

? ? pd()#下筆

? ? #陰影效果

? ? t = cos(radians(heading()+45))/8+0.25

? ? pencolor(t,t,t)

? ? pensize(n/3)

? ? forward(l)#畫樹枝

? ? if n>0:

? ? ? ? b = random()*15+10 #右分支偏轉(zhuǎn)角度

? ? ? ? c = random()*15+10 #左分支偏轉(zhuǎn)角度

? ? ? ? d = l*(random()*0.25+0.7) #下一個分支的長度

? ? ? ? #右轉(zhuǎn)一定角度,畫右分支

? ? ? ? right(b)

? ? ? ? tree(n-1,d)

? ? ? ? #左轉(zhuǎn)一定角度熬的,畫左分支

? ? ? ? left(b+c)

? ? ? ? tree(n-1,d)

? ? ? ? #轉(zhuǎn)回來

? ? ? ? right(c)

? ? else:

? ? ? ? #畫葉子

? ? ? ? right(90)

? ? ? ? n=cos(radians(heading()-45))/4+0.5

? ? ? ? pencolor(n,n*0.8,n*0.8)

? ? ? ? circle(3)

? ? ? ? left(90)

? ? ? ? #添加0.3倍的飄落葉子

? ? ? ? if(random()>0.7):

? ? ? ? ? ? pu()

? ? ? ? ? ? #飄落

? ? ? ? ? ? t = heading()

? ? ? ? ? ? an = -40 +random()*40

? ? ? ? ? ? setheading(an)

? ? ? ? ? ? dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)

? ? ? ? ? ? forward(dis)

? ? ? ? ? ? setheading(t)

? ? ? ? ? ? #畫葉子

? ? ? ? ? ? pd()

? ? ? ? ? ? right(90)

? ? ? ? ? ? n = cos(radians(heading()-45))/4+0.5

? ? ? ? ? ? pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)

? ? ? ? ? ? circle(2)

? ? ? ? ? ? left(90)

? ? ? ? ? ? pu()

? ? ? ? ? ? #返回

? ? ? ? ? ? t=heading()

? ? ? ? ? ? setheading(an)

? ? ? ? ? ? backward(dis)

? ? ? ? ? ? setheading(t)

? ? pu()

? ? backward(l)#退回

bgcolor(0.5,0.5,0.5)#背景色

ht()#隱藏turtle

speed(0)#速度 1-10漸進,0 最快

tracer(0,0)

pu()#抬筆

backward(100)

left(90)#左轉(zhuǎn)90度

pu()#抬筆

backward(300)#后退300

tree(12,100)#遞歸7層

done()



暗色效果


暗色效果

代碼

from turtle import *

from random import *

from math import *

def tree(n, l):

? ? pd()

? ? t = cos(radians(heading() + 45)) / 8 + 0.25

? ? pencolor(t, t, t)

? ? pensize(n / 4)

? ? forward(l)

? ? if n > 0:

? ? ? ? b = random() * 15 + 10

? ? ? ? c = random() * 15 + 10

? ? ? ? d = l * (random() * 0.35 + 0.6)

? ? ? ? right(b)

? ? ? ? tree(n - 1, d)

? ? ? ? left(b + c)

? ? ? ? tree(n - 1, d)

? ? ? ? right(c)

? ? else:

? ? ? ? right(90)

? ? ? ? n = cos(radians(heading() - 45)) / 4 + 0.5

? ? ? ? pencolor(n, n, n)

? ? ? ? circle(2)

? ? ? ? left(90)

? ? pu()

? ? backward(l)

bgcolor(0.5, 0.5, 0.5)

ht()

speed(0)

tracer(0, 0)

left(90)

pu()

backward(300)

tree(13, 100)

done()

two 玫瑰花

效果(有繪制過程)

玫瑰花效果(有繪制過程)

代碼

from turtle import *

import time

setup(1000,800,0,0)

speed(0)

penup()

seth(90)

fd(340)

seth(0)

pendown()

speed(5)

begin_fill()

fillcolor('red')

circle(50,30)

for i in range(10):

? ? fd(1)

? ? left(10)

circle(40,40)

for i in range(6):

? ? fd(1)

? ? left(3)

circle(80,40)

for i in range(20):

? ? fd(0.5)

? ? left(5)

circle(80,45)

for i in range(10):

? ? fd(2)

? ? left(1)

circle(80,25)

for i in range(20):

? ? fd(1)

? ? left(4)

circle(50,50)

time.sleep(0.1)

circle(120,55)

speed(0)

seth(-90)

fd(70)

right(150)

fd(20)

left(140)

circle(140,90)

left(30)

circle(160,100)

left(130)

fd(25)

penup()

right(150)

circle(40,80)

pendown()

left(115)

fd(60)

penup()

left(180)

fd(60)

pendown()

end_fill()

right(120)

circle(-50,50)

circle(-20,90)

speed(1)

fd(75)

speed(0)

circle(90,110)

penup()

left(162)

fd(185)

left(170)

pendown()

circle(200,10)

circle(100,40)

circle(-52,115)

left(20)

circle(100,20)

circle(300,20)

speed(1)

fd(250)

penup()

speed(0)

left(180)

fd(250)

circle(-300,7)

right(80)

circle(200,5)

pendown()

left(60)

begin_fill()

fillcolor('green')

circle(-80,100)

right(90)

fd(10)

left(20)

circle(-63,127)

end_fill()

penup()

left(50)

fd(20)

left(180)

pendown()

circle(200,25)

penup()

right(150)

fd(180)

right(40)

pendown()

begin_fill()

fillcolor('green')

circle(-100,80)

right(150)

fd(10)

left(60)

circle(-80,98)

end_fill()

penup()

left(60)

fd(13)

left(180)

pendown()

speed(1)

circle(-200,23)

exitonclick()

three 圣誕樹

圣誕樹 (動態(tài)生成效果)

圣誕樹 (動態(tài)生成效果)

代碼:

from turtle import *

import random

import time

n = 100.0

speed("fastest")

screensize(bg='seashell')

left(90)

forward(3*n)

color("orange", "yellow")

begin_fill()

left(126)

for i in range(5):

? ? forward(n/5)

? ? right(144)

? ? forward(n/5)

? ? left(72)

end_fill()

right(126)

color("dark green")

backward(n*4.8)

def tree(d, s):

? ? if d <= 0: return

? ? forward(s)

? ? tree(d-1, s*.8)

? ? right(120)

? ? tree(d-3, s*.5)

? ? right(120)

? ? tree(d-3, s*.5)

? ? right(120)

? ? backward(s)

tree(15, n)

backward(n/2)

for i in range(200):

? ? a = 200 - 400 * random.random()

? ? b = 10 - 20 * random.random()

? ? up()

? ? forward(b)

? ? left(90)

? ? forward(a)

? ? down()

? ? if random.randint(0, 1) == 0:

? ? ? ? ? ? color('tomato')

? ? else:

? ? ? ? color('wheat')

? ? circle(2)

? ? up()

? ? backward(a)

? ? right(90)

? ? backward(b)

time.sleep(60)


未完待續(xù)赊级!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末押框,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子理逊,更是在濱河造成了極大的恐慌橡伞,老刑警劉巖盒揉,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兑徘,居然都是意外死亡刚盈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門挂脑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藕漱,“玉大人,你說我怎么就攤上這事最域∏捶郑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵镀脂,是天一觀的道長牺蹄。 經(jīng)常有香客問我,道長薄翅,這世上最難降的妖魔是什么沙兰? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮翘魄,結(jié)果婚禮上鼎天,老公的妹妹穿的比我還像新娘。我一直安慰自己暑竟,他們只是感情好斋射,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著但荤,像睡著了一般罗岖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腹躁,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天桑包,我揣著相機與錄音,去河邊找鬼纺非。 笑死哑了,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烧颖。 我是一名探鬼主播弱左,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼炕淮!你這毒婦竟也來了拆火?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榜掌,沒想到半個月后优妙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡憎账,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年套硼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胞皱。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡邪意,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出反砌,到底是詐尸還是另有隱情雾鬼,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布宴树,位于F島的核電站策菜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏酒贬。R本人自食惡果不足惜又憨,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锭吨。 院中可真熱鬧蠢莺,春花似錦、人聲如沸零如。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽考蕾。三九已至祸憋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辕翰,已是汗流浹背夺衍。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工狈谊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人河劝。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像赎瞎,于是被迫代替她去往敵國和親牌里。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344