首页
/
每日頭條
/
圖文
/
python用turtle庫繪制幾何圖形
python用turtle庫繪制幾何圖形
更新时间:2026-07-30 06:24:10

python用turtle庫繪制幾何圖形(用Python标準庫turtle畫一隻老虎)1

虎年到了,祝大家新年虎虎生威!大吉大利!

今年朋友問我什麼時候能畫一隻老虎。不能辜負朋友的期待,還是一樣的流程,在百度圖片裡下載了一張虎年的圖片(原圖局部見上圖),然後開始肝代碼。

結果與原圖對比

python用turtle庫繪制幾何圖形(用Python标準庫turtle畫一隻老虎)2

與原圖對比,我自己認為還原度是高于95%的。

用到的方法

使用的都是turtle庫中的函數,直接導入turtle庫即可調用。

1.畫布設置

setup(width, height, x, y): 設置窗口大小和窗口左上角在屏幕中的位置。

title(): 設置窗口的标題。

screensize(width, height, color): 設置畫布大小,背景顔色。

done(): 繪圖結束後,不自動關閉窗口。

2.畫筆設置

pencolor(color): 設置畫筆顔色。

width(): 設置畫筆寬度。

speed(int): 設置畫筆的速度,傳入1~10的數字,1最慢,10最快。傳入其他值會更快,但是沒有鼠标移動的動畫效果。

penup(): 提起畫筆,提起後移動畫筆不會留下痕迹。

pendown(): 落下畫筆,開始繪圖前先将畫筆落下。

setx(value): 設置畫筆的x軸坐标。

sety(value): 設置畫筆的y軸坐标。

towards(x, y): 設置畫筆指向的點。

setheading(): 設置畫筆的方向。與towards()配合可以設置畫筆指向某個點,如setheading(towards(0, 0))可以設置畫筆指向原點。

pos(): 返回畫筆當前的坐标。鼠标移動一段時間後可以print()打印此函數獲取鼠标位置。

heading(): 返回畫筆當前的方向。

3. 畫筆操作

circle(radius[, extent=arc]): 畫一個圓,傳入圓的半徑,根據畫筆的方向控制圓心的位置,圓心與畫筆的方向垂直。傳入弧度值可以畫出指定弧度的圓弧。

left(angle): 畫筆左轉,傳入任意一個目标角度。

right(angle): 畫筆右轉。

forward(distance): 畫筆前進一段距離。

backward(distance): 畫筆後退一段距離。

goto(x, y): 移動畫筆到指定坐标。

4. 顔色填充

begin_fill(): 開始填充。

fillcolor(color): 設置圖形中填充的顔色。

end_fill(): 結束填充。

自定義的函數

為了精簡代碼,我自己定義了幾個函數,在後面的代碼中重複利用。

1.設置畫筆到某一個點,每畫一部分圖形的開頭都可以直接調用,COLOR是定義的一個全局變量。

def set_start(x, y, w, c=COLOR): penup() setx(x) sety(y) setheading(towards(0, 0)) width(w) pencolor(c) pendown() speed(0)

2.将轉向和移動的代碼封裝,轉不同角度和移動不同的距離可以畫出不同的弧線,封裝後會節省非常多的代碼。

def left_rotate(time, angle, length): for i in range(time): left(angle) forward(length)

3.填充顔色定義成裝飾器,當某部分圖形完成時,加上裝飾器即可完成顔色填充。

def fill_color(color): def decorator_all(func): def wrapper(*args, **kwargs): begin_fill() func(*args, **kwargs) fillcolor(color) end_fill() return wrapper return decorator_all

4.填充顔色的補丁函數。

turtle庫填充顔色時會去關聯上一個圖形的終點,大部分情況填充顔色都沒有問題,但少數情況下填充結果不符合預期。

我沒有花時間去翻官方有沒有這樣的issue,自己寫了個補丁函數,重置上一個圖形的終點(重點:重置的是上一個),當填充顔色不符合預期時,打上補丁。補丁函數中調用了前面定義的set_start(),在要填充圖形的起點畫個點。

def fill_color_patch(x, y, c='#fffffb'): set_start(x, y, 1, c=c) forward(1)

經驗總結

1.畫圖前先分析一下圖形。

先定一個坐标原點,圖形的每個部分都根據原點去找位置,這樣可以避免圖形出現大的偏差。

2.順序很重要。

有些部分之間的先後順序不能反,主要影響的是顔色填充,這點也是圖形分析時要注意的,分析好圖層順序。

3.靈活運用。

目标是最大可能完成圖像,如果能畫得更好,代碼增加很多,也是值得的。自定義的函數,适用就用,不适用的地方就算了。

4.耐心很重要。

用的是基本庫,基本的函數,就那麼幾個,其實技術沒那麼重要,重要的是耐心。畫得不像不怕,多試幾次就行了。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
睡前運動操瘦腿(睡前15秒瘦大腿操輕松燃脂)
睡前運動操瘦腿(睡前15秒瘦大腿操輕松燃脂)
  睡前15秒瘦大腿操輕松燃脂   大腿好難瘦?大腿是很多女生公認最難減的位置,鏟除肥厚馬鞍肉、松垮大腿肉,天天做瘦腿操,2步驟就能燃燒深層脂肪,幫助鍛煉腿部肌肉!      繁忙的日常生活之中,總為了家庭、工作以及育兒等等蠟燭多頭燒,天天長時間在辦公室裡前傾盯着電腦,或是久站服務客人,導緻雖然身心疲勞,身體卻因為缺乏活動而血液循環不良,再加上不敵歲月流逝,...
2026-07-30
六個堅持專家解讀(董振華從六個堅持)
六個堅持專家解讀(董振華從六個堅持)
  從“六個堅持”牢牢把握新時代中國特色社會主義思想的世界觀和方法論   董振華   〔中共中央黨校(國家行政學院)哲學教研部副主任、教授〕   黨的二十大報告指出:“中國共産黨為什麼能,中國特色社會主義為什麼好,歸根到底是馬克思主義行,是中國化時代化的馬克思主義行。擁有馬克思主義科學理論指導是我們黨堅定信仰信念、把握曆史主動的根本所在。”“推進馬克思主義中...
2026-07-30
懷念ag 老成員(AG雜志樂手專訪來自納什維爾的作曲人兼樂手Darrell)
懷念ag 老成員(AG雜志樂手專訪來自納什維爾的作曲人兼樂手Darrell)
  在看到 4 個月的比利牛斯犬 Angus 和活 潑的澳大利亞牧羊犬 Miller 之後,就知 道快到 Darrell Scott 的家了,兩隻狗狗會在 石子路上蹦蹦跳跳,伸出舌頭,搖着尾巴。它 們本是用來看護羊群,免受納什維爾東部 100 公裡之外在坎伯蘭高原林區的山上四處覓食的 土狼和野豬的侵擾,不過不論何時,隻要有人來, 它們都會非常高興。小狗會馬上...
2026-07-30
強化源頭管控消除火災隐患(推動多部門加強日常監管消除火災隐患)
強化源頭管控消除火災隐患(推動多部門加強日常監管消除火災隐患)
     近日,上海市嘉定區檢察院督促該區市場監督管理局對違法改裝電動自行車履行行政監管職責的公益訴訟案例,因與公共安全相關度高,受到市民廣泛關注,獲評上海市檢察機關2020年度公益訴訟十大典型案例。   事情要從2020年5月說起。上海市檢察院經調研發現,電動自行車充電引發的火災次數日趨增加,影響公衆安全,遂在該市檢察機關開展電動自行車充電安全管理領域公益...
2026-07-30
金瀚把李一桐按進蛋糕(烏雲遇皎月李一桐曾可妮平分秋色)
金瀚把李一桐按進蛋糕(烏雲遇皎月李一桐曾可妮平分秋色)
  #頭條創作挑戰賽#   《烏雲遇皎月》正在熱播中,該劇集合了懸疑、愛情、浪漫、奇幻等元素,主要講述了學霸修理工與懸疑推理女作家的愛情故事。   《烏雲遇皎月》改拍自丁墨的原著小說,男主邬遇(金瀚飾演)與譚皎(李一桐飾演)在一次郵輪旅行中相遇,二人一見鐘情。旅行結束後,譚皎和邬遇的部分記憶缺失,邬遇失去了幾天的記憶,而譚皎失去了一年前的記憶。      譚...
2026-07-30
Copyright 2023-2026 - www.tftnews.com All Rights Reserved