大數據文摘出品
作者:李雷、蔣寶尚
還記得小時候瘋狂收集和交換神奇寶貝卡片的經歷嗎?
還記得和小夥伴拿著精靈球,一起召喚小精靈的中二模樣嗎?
最近上映的《大偵探皮卡丘》,是否會讓你秒回童年,進入那個充滿神奇寶貝的世界,和小智一起踏上成為寶可夢大師的旅程呢?
雖然,電影中的皮卡丘是一位賤萌的中年大叔,但是觀影過後的文摘菌依然想起了寶可夢世界裡二十多年不變的C位明星小可愛。
皮卡丘臉頰兩邊有著小小的電力袋,因此他獨有的能力就是可以放電。在動畫片中,小智的皮卡丘性格十分害羞,稍有不滿就亂放電電人。
小時候也想擁有一隻會放電的皮卡丘,長大後漸漸明白,這種高度智能會放電的「動物」只存在於夢中。
不怕,不怕,雖然現實中沒有,但是我們可以畫一隻喲~素描什麼的都弱爆了,我們來用Python畫一隻。
經過一整天的苦戰,從未接觸過turtle庫的文摘菌實現了從0到1,成就感滿滿。
先看下效果
基本思路:選好畫板大小,設置好畫筆顏色,粗細,定位好位置,然後畫鼻子,頭、耳朵,眼睛,嘴,身體,手腳,尾巴。
都知道,turtle 是 python 內置的一個比較有趣味的模塊,俗稱 海龜繪圖,它是基於tkinter模塊打造,提供一些簡單的繪圖工具。
turtle的繪圖方式非常簡單直觀,想像有一隻尾巴上蘸著顏料的小海龜在電腦屏幕上爬行,隨著它的移動就能畫出線條來。
使用海龜作圖,我們不僅能夠只用幾行代碼就創建出令人印象深刻的視覺效果,而且還可以跟隨海龜看看每行代碼如何影響到它的移動。這能夠幫助我們理解代碼的邏輯。所以海龜作圖也常被用作新手學習 Python 的一種方式。
了解了tuttle的用法之後就可以開始實戰了。
部分代碼示例:
import turtle as t
def infoPrt():
print('coordinate: ' + str(t.pos()))
print('angle: ' + str(t.heading()))
t.pensize(3)
t.hideturtle()
t.colormode(255)
t.color("black")
t.setup(700, 650)
t.speed(10)
t.st()
#t.dot()
t.pu()
#t.goto(-150,100)
t.goto(-210,86)
t.pd()
infoPrt()
# 頭
print('頭')
t.seth(85)
t.circle(-100,50)
#t.seth(78)
#t.circle(-100,25)
infoPrt()
t.seth(25)
t.circle(-170,50)
infoPrt()
# 右耳
print('右耳')
t.seth(40)
#t.circle(-250,52)
t.circle(-250,30)
infoPrt()
# 右耳尖
t.begin_fill()
# 左
t.circle(-250,22)
#t.fillcolor("pink")
# 右
t.seth(227)
t.circle(-270, 15)
prePos = t.pos()
infoPrt()
# 尾巴
t.pu()
t.setpos(p_tail)
t.pd()
t.begin_fill()
t.seth(50)
t.fd(25)
t.seth(-50)
t.fd(30)
p_tail1=t.pos
t.seth(-140)
t.fd(36)
t.end_fill()
t.seth(39)
# 右尾和h1
t.fd(72)
# 右尾和v1
t.seth(125)
t.fd(48)
# 右尾和h2
t.seth(40)
t.fd(53)
# 右尾和v2
t.seth(88)
t.fd(45)
# 右尾和h3
t.seth(35)
t.fd(105)
# 右尾和v3
t.seth(105)
t.circle(850, 8)
#t.fd(105)
t.seth(215)
#t.fd(125)
t.circle(850, 11)
t.seth(280)
t.fd(110)
t.seth(220)
t.fd(50)
t.seth(309)
t.fd(56)
完整代碼需要360行,為了限於篇幅,只放了一部分代碼,需要完整源碼的盆友,可關注大數據文摘,回復「皮卡丘」可獲得。
使用turtle畫圖,思路其實很簡單,就是通過trutle模塊實現基本的圓,橢圓,曲線等,難點在於如何定位每個部位的位置。
對於初學者,文摘菌建議先入手比較簡單的項目,比如
同樣此代碼,大數據文摘後臺回復「皮卡丘」可獲得完整版。
這個皮卡丘,只給出了臉部繪畫,相比全身畫像,需要考慮的構件相對少一些,適合新手入門。