首页
/
每日頭條
/
圖文
/
python用turtle庫繪制幾何圖形
python用turtle庫繪制幾何圖形
更新时间:2026-09-16 14:34:21

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
推荐阅读
融化在每一次的擁抱(臣服在每一瞬間)
融化在每一次的擁抱(臣服在每一瞬間)
  臣服這不是讓大家被動,而是投入在每一個瞬間,同時站在這個甯靜看這個瞬間。   這麼做,痛苦、窩囊和不舒服自然會消失。   臣服和容納一切,并不是什麼都不做,而是一個最自由的選擇。   面對當下所帶來的一切不去抵抗,不光是因為抵抗沒有用,甚至還會造出更多煩惱和不順。   活在當下的動,反而可以完成一般人認為不可思議的事。   一般人做事,很少是從内心的甯靜...
2026-09-16
最年輕起兵稱帝的是誰(4位對手中有個曾4度稱帝)
最年輕起兵稱帝的是誰(4位對手中有個曾4度稱帝)
  第36屆香港電影金像獎頒獎典禮将于2017年4月9日晚舉行,此前,香港金像獎對外公布了提名名單,對于今年的提名,阿歪是沒感到多少意外的,畢竟現在稱得上是香港電影的影片也沒多少,在這裡面能當參賽的作品也就更少了,所以阿歪在看電影的時候基本上就能猜到這部片能不能被提名最佳影片,這個主角能不能被提名最佳男主。不過,意料之外的事還是有的,《七月與安生》這部影片雖...
2026-09-16
元啟為什麼是白絕兒子(千古玦塵後池生了個兒子)
元啟為什麼是白絕兒子(千古玦塵後池生了個兒子)
  由周冬雨、許凱領銜主演,張嘉倪、劉學義等主演的古裝玄幻仙俠劇《千古玦塵》正在熱播當中。   現如今,該劇已經開啟了超前點播,正片直接從原本的第二十八集更新到了三十八集,預告片也順帶着更新到了第四十四集。      後池生了個兒子根據四十三集和四十四集的預告片來分析,後池已經覺醒為主神上古。   她身為後池時所生的兒子也已經長大。   不似四十二集的預告片...
2026-09-16
王一博同款wink(還和王一博同框)
王一博同款wink(還和王一博同框)
  提前說好哦!今天是愚人節開的玩笑哦,做人最重要是開心嘛~    Joy One  泰國時間今天淩晨12點半,Bright亮哥發了一條推特,和Win赢仔明目張膽秀恩愛!!      雖然沒多久就删掉了!可是嘿嘿嘿,泰妃速度夠快,順手就截圖了,哈哈!别忘了,互聯網是有記憶的。話說你們這樣秀恩愛好嗎?好嗎?真的好嗎?    Joy Two  今天,#Brigh...
2026-09-16
金龜子講的睡前小故事(金龜子講睡前故事)
金龜子講的睡前小故事(金龜子講睡前故事)
        呼噜豬,真好笑,每天早上都要睡懶覺。   叮鈴鈴,鬧鐘響,呼噜豬翻了個身又睡過去了。媽媽一遍一遍地喊,爸爸一次一次地叫,呼噜豬蒙上被子都沒有聽到。   當鬧鈴又響了一次時,呼噜豬突然從床上起來,糟糕糟糕,今天可千萬别遲到啊。   呼噜豬沒洗臉,沒刷牙,左腳的鞋子還穿在了右腳上,慌慌張張地收拾書包,呼噜豬都快要急死了。   豬爸爸看着呼噜豬匆忙...
2026-09-16
Copyright 2023-2026 - www.tftnews.com All Rights Reserved