用Python標准庫turtle畫一頭金牛,祝您新年牛氣沖天!(附源碼)


前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理。

PS:如有需要Python學習資料的小伙伴可以點擊下方鏈接自行獲取

python免費學習資料、代碼以及交流解答點擊即可加入


 

今年是牛年,祝大家新年牛氣沖天!嗨皮牛Year!

前幾天在百度圖片里下載了一張金牛的圖片,就是封面的這張。想着用Python標准庫turtle肯定可以畫出這張圖,所以說干就干,花兩天時間實現了。

畫圖雖然不是Python的主要功能,但繪制這頭金牛還是展示了Python無所不能的強大屬性。接下來介紹實現的過程。

圖片分析

初看圖片,深紅色的背景下,一頭金光閃閃的金牛。簡單分析,圖形主要分為兩大部分,外面的圓環和內部的金牛。

圓環由同心圓和折線形的圓盤構成,同心圓直接畫圓就可以,折線形的圓盤是旋轉對稱的,每一個部分由圓弧和半徑方向的線組成,一共有26個相同的部分,計算出每個部分的弧形比例即可依次繪制。

金牛圖形是不規則的,里面有很多不同弧度和不同長度的不規則曲線,控制畫筆邊前進邊旋轉,每次前進不同的距離和旋轉不同的角度,可以繪制出這些曲線。里面的圖案,如五瓣花就是用這種方式完成。

對圖形有了基本的了解,就看turtle中有哪些方法可以用於實現這些操作了。

用到的Turtle方法介紹

turtle是Python的標准庫,直接導入即可使用。

from turtle import *

1. 畫布設置

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

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

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

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

2. 畫筆設置

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

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

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

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

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

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

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

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

3. 畫筆操作

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

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

right(angle): 畫筆右轉。

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

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

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

4. 顏色填充

begin_fill(): 開始填充。

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

end_fill(): 結束填充。

有了這些方法,就可以實現金牛圖中的各種圖案了。如畫五瓣花輪廓的代碼如下:

def draw_flower(a, color):
    pencolor('red')
    begin_fill()
    for j in range(5):
        for i in range(40):
            if 0 <= i < 20:
                a = a - 0.08
            else:
                a = a + 0.08
            forward(a)
            left(6)
        right(168)
    fillcolor(color)
    end_fill()

實現舉例

我的繪圖順序是從外到內,這樣較小的圖形會置於較大的圖形之上,填充的顏色不會被遮擋。

最開始繪制的是外圍的同心圓。先penup()提起畫筆,sety()將畫筆從圓心向下移動半徑的距離,然后調整畫筆方向,pendown()落下畫筆,circle()畫圓。

 

 

整個過程分了很多張截圖,為了避免篇幅過長,就不全部放了。再放一張最后畫眼睛的動圖,可以參照上面同心圓的方式拆分步驟。

 


其他的圖案,如果會相互覆蓋,要先畫大的圖形,再畫小的圖形。如果不會相互覆蓋,順序可以隨意調整。

總結

 


對比原圖和turtle繪制的圖形,整體上還是很像的,但部分細節並沒有完全還原。因為沒有原圖的任何參數,繪制過程中全靠目測(像素尺子),很難避免誤差,再花一些時間調試應該可以更像。
附代碼:
https://github.com/bigtigeryo/gold-cow


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM