Python筆下那些神奇的樹
作者:Python課堂
turtle是一只神奇的小海龜,可以畫出大千世界。而turtle加入了python大家族,像是如龜?shù)盟?,變得更加受歡迎。
turtle是一只神奇的小海龜,可以畫出大千世界。而turtle加入了python大家族,像是如龜?shù)盟?,變得更加受歡迎。
古人有詩云“庭中有奇樹,綠葉發(fā)華滋”,樹之美,或婀娜、或繁茂、或蒼勁、或青翠。python-turtle筆下的樹更是別有一番風味。
小園新種紅櫻樹,閑繞花行便當游。
- # coding=gbk
- import turtle as Timport randomimport 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)
- # wheat小麥w.screensize(bg='white')
- t.left(90)
- t.up()t.backward(150)
- t.down()t.color('sienna')
- # 畫櫻花的軀干Tree(60, t)
- # 掉落的花瓣P(guān)etal(200, t)
- w.exitonclick()
江南有丹橘,經(jīng)冬猶綠林
- # coding=gbk
- from turtle import *from random import *
- from math import *
- class Tree: def __init__(self): setup(1000, 500)
- bgcolor(1, 1, 1) # 背景色
- # ht() # 隱藏turtle speed(10) # 速度 1-10漸進,0 最快
- # tracer(1, 100) # 設(shè)置繪圖屏幕刷新頻率,參數(shù)1設(shè)置在正常刷新頻次的第參數(shù)1次刷新,參數(shù)2設(shè)置每次刷新的時延
- tracer(0, 0)
- pu() # 抬筆 backward(100)
- # 保證筆觸箭頭方向始終不向下,此處使其左轉(zhuǎn)90度,而不是右轉(zhuǎn)
- left(90) # 左轉(zhuǎn)90度
- backward(300) # 后退300
- def tree(self, n, l): pd() # 下筆 # 陰影效果 t = cos(radians(heading() + 45)) / 8 + 0.25
- pencolor(t, t, t) pensize(n / 1.2)
- 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) self.tree(n - 1, d)
- # 左轉(zhuǎn)一定角度,畫左分支 left(b + c) self.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)
- fillcolor(n, n * 0.8, n * 0.8)
- begin_fill() circle(3)
- left(90)
- end_fill() # 添加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)
- fillcolor(n, n * 0.8, n * 0.8)
- begin_fill() circle(2)
- left(90)
- end_fill() pu() # 返回 t = heading() setheading(an) backward(dis) setheading(t) # pass pu() backward(l) # 退回def main(): tree = Tree() tree.tree(12, 100) # 遞歸7層
- done()if __name__ == '__main__':
- main()
落紅不是無情物,化作春泥更護花
- # coding=gbk
- from turtle import *
- from random import *
- # 畫樹方法def drawTree(n, l): pendown() pencolor('#5d3c3c')
- pensize( n / 1.5)
- forward(l) if n > 0:
- dr = randint(30, 40)
- dl = randint(30, 40)
- move = l * (random() * 0.4 + 0.5)
- right(dr) drawTree(n - 1, move)
- left(dr + dl) drawTree(n - 1, move)
- right(dl) else:
- drawPetal(3)
- penup() backward(l)# 花瓣位置生成def petalPlace(m, x, y): penup() goto(x, y)
- pendown() setheading(0)
- tracer(False) for i in range(m):
- if i == 0:
- drawPetal(5)
- else:
- penup() goto(x, y)
- a = randint(20, 400)
- b = randint(-50, 50)
- forward(a) left(90)
- forward(b) right(90)
- pendown() drawPetal(5)
- # 花朵繪畫方法def drawPetal(n): colormode(255)
- r = randint(200, 255)
- g = randint(8, 158)
- b = randint(8, 158)
- begin_fill() fillcolor(r, g, b) pencolor(r, g, b) circle(n) end_fill()# 啟動方法def run(): setup(1.0, 1.0)
- penup() goto(-50, -150)
- left(90)
- pendown() hideturtle() tracer(False) drawTree(13, 150)
- petalPlace(160, -100, -150)
- run()done()
川原秋色靜,蘆葦晚風鳴
- import turtle
- import randomstack = []def createWord(max_it, word, proc_rules, x, y, turn):
- turtle.up() turtle.home() turtle.goto(x, y) turtle.right(turn) turtle.down() t = 0
- while t < max_it:
- word = rewrite(word, proc_rules) drawit(word, 5, 20)
- tt = t+1
- def rewrite(word, proc_rules):
- wordList = list(word) for i in range(len(wordList)):
- curChar = wordList[i] if curChar in proc_rules:
- wordList[i] = proc_rules[curChar] return "".join(wordList)
- def drawit(newWord, d, angle):
- newWordLs = list(newWord) for i in range(len(newWordLs)):
- cur_Char = newWordLs[i] if cur_Char == 'F':
- turtle.forward(d) elif cur_Char == '+':
- turtle.right(angle) elif cur_Char == '-':
- turtle.left(angle) elif cur_Char == '[':
- state_push() elif cur_Char == ']':
- state_pop()def state_push():
- global stack
- stack.append((turtle.position(), turtle.heading()))def state_pop():
- global stack
- position, heading = stack.pop() turtle.up() turtle.goto(position) turtle.setheading(heading) turtle.down()def randomStart():
- x = random.randint(-300, 300)
- y = random.randint(-320, -280)
- heading = random.randint(-100, -80)
- return ((x, y), heading)
- def main():
- rule_sets = [] rule_sets.append(((3, 5), 'F', {'F':'F[+F][-F]F'}))
- rule_sets.append(((4, 6), 'B', {'B':'F[-B][+ B]', 'F':'FF'}))
- rule_sets.append(((2, 4), 'F', {'F':'FF+[+F-F-F]-[-F+F+F]'}))
- tree_count = 50
- turtle.tracer(10, 0)
- for x in range(tree_count):
- rand_i = random.randint(0, len(rule_sets) - 1)
- selected_ruleset = rule_sets[rand_i] i_range, word, rule = selected_ruleset low, high = i_range i = random.randint(low, high) start_position, start_heading = randomStart() start_x, start_y = start_position createWord(i, word, rule, start_x, start_y, start_heading)if __name__ == '__main__': main()
責任編輯:趙寧寧
來源:
今日頭條