最近發生了很多事情,工作不開心,愛情無果而終,身邊的小夥伴陸陸續續離職。雖然都不是會一下子擊垮自己的事情,但是積攢起來,還是會有突然感到疲憊和倦怠的時候,有一種不知道下一步要走向哪裡的無力感。
在這個城市留下了很多的回憶,但是身邊的人一個個離開,走到現在,似乎沒有太多留戀的了,也沒想好未來要去哪裡。自己是一個始終需要新鮮感的人,在這裡停留了太久,大概到了該說再見的時候了吧。
那麼,用一個不熟悉的語言,畫棵櫻花樹送給自己吧,程式碼也可以很浪漫不是嗎。520剛剛過了,沒有愛情,自己也要好好愛自己才對。
可以參考之前的部落格:
之前沒怎麼用過 Python,就對別人的程式碼進行分析和效果優化好啦,順便學習一下。
這個是原來的效果圖,有點灰濛濛的,微微改動,讓它明媚一點。
修改之後的程式碼:
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 #右分支偏轉角度
c = random()*15+10 #左分支偏轉角度
d = l*(random()*0.25+0.7) #下一個分支的長度
#右轉一定角度,畫右分支
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
ran=random()
#這裡相比於原來隨機新增了填充的圓圈,讓櫻花葉子看起來更多一點
if(ran>0.7):
begin_fill()
circle(3)
fillcolor('pink')
#把原來隨機生成的葉子換成了統一的粉色
pencolor("pink")
circle(3)
if(ran>0.7):
end_fill()
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.956,0.9255,0.9882)#設定背景色(把灰色換成淡紫色)
ht()#隱藏turtle
speed(0)#速度 1-10漸進,0 最快
tracer(0,0)
pu()#擡筆
backward(50)
left(90)#左轉90度
pu()#擡筆
backward(300)#後退300
tree(12,100)#遞迴7層
done()
之後的效果溫暖一點,喜歡這種更有溫度的色調:
櫻花樹的繪製效果是通過 Python 中的 turtle 來實現的,Python 的強大之處在於有許多很強大的庫,turtle就是其中之一,是 Python 自帶的一個庫。
turtle庫繪製原理:有一隻海龜在表單正中心,在畫布上游走,走過的軌跡形成了繪製的圖形,海龜由程式控制,可以自由改變顏色、方向寬度等。
(1) . turtle 繪圖表單
setup用來設定表單大小,後兩個引數為非必選引數;
turtle.setup(width,height,startx,starty)
(2) . turtle 的座標體系
畫布上,預設有一個座標原點為畫布中心的座標軸,座標原點上有一隻面朝x軸正方向的小烏龜。
這裡我們描述小烏龜時使用了兩個詞語:座標原點(位置),面朝x軸正方向(方向), turtle 繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態的。
(3) . turtle 畫筆屬性
命令 | 說明 |
---|---|
turtle.pensize() | 設定畫筆的寬度 |
turtle.pencolor() | 沒有引數傳入,返回當前畫筆顏色;傳入引數設定畫筆顏色,可以是字串如 「green」, 「red」,也可以是RGB 3元組 |
turtle.speed(speed) | 設定畫筆移動速度,畫筆繪製的速度範圍 [0,10] 整數,數位越大越快 |
(4) . turtle 繪圖命令
運動命令
命令 | 說明 |
---|---|
turtle.forward(distance) | 向當前畫筆方向移動distance畫素長度 |
turtle.backward(distance) | 向當前畫筆相反方向移動distance畫素長度 |
turtle.right(degree) | 順時針移動degree° |
turtle.left(degree) | 逆時針移動degree° |
turtle.pendown() | 移動時繪製圖形,預設時也為繪製 |
turtle.goto(x,y) | 將畫筆移動到座標為x,y的位置 |
turtle.penup() | 提起筆移動,不繪製圖形,用於另起一個地方繪製 |
turtle.pendown() | 移動時繪製圖形,預設時也為繪製 |
turtle.circle() | 畫圓,半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓 |
setx( ) | 將當前x軸移動到指定位置 |
sety( ) | 將當前y軸移動到指定位置 |
setheading(angle) | 設定當前朝向為angle角度 |
home() | 設定當前畫筆位置為原點,朝向東 |
dot® | 繪製一個指定直徑和顏色的圓點 |
控制命令
命令 | 說明 |
---|---|
turtle.fillcolor(colorstring) | 繪製圖形的填充顏色 |
turtle.color(color1, color2) | 同時設定 pencolor=color1, fillcolor=color2 |
turtle.filling() | 返回當前是否在填充狀態 |
turtle.begin_fill() | 準備開始填充圖形 |
turtle.end_fill() | 填充完成 |
turtle.hideturtle() | 隱藏畫筆的turtle形狀 |
turtle.showturtle() | 顯示畫筆的turtle形狀 |
全域性控制命令
命令 | 說明 |
---|---|
turtle.clear() | 清空turtle視窗,但是turtle的位置和狀態不會改變 |
turtle.reset() | 清空視窗,重置turtle狀態為起始狀態 |
turtle.undo() | 復原上一個turtle動作 |
turtle.isvisible() | 返回當前turtle是否可見 |
stamp() | 複製當前圖形 |
turtle.hideturtle() | 隱藏畫筆的turtle形狀 |
turtle.write(s [,font=(「font-name」,font_size,「font_type」)]) | 寫文字,s為文字內容,font是字型的引數,分別為字型名稱,大小和型別;font為可選項,font引數也是可選項 |
雖然沒有在原來的基礎上改動太多的程式碼,只是簡單的給櫻花樹換了個風格,但是其實也做了很多的嘗試和調整,也學到了怎麼使用 turtle 。
這篇部落格磨磨唧唧寫了好久,在調整和寫的時候也在調整自己的心情。在這中間還趁著週末自己跑去青島溜達了一圈,比煙臺熱好多啊,哈哈哈哈。
其實想想,想要新鮮感也很容易,可以自己來創造嘛,所以就準備買個吉他開始練習,雖然還是不知道以後要幹什麼,但是先走好腳下的路,活在當下,以後的事以後再說。
Everything will be ok~ 默默給自己加個油!