欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用turtle繪制有趣的龍年祝福動畫

 更新時間:2024年01月30日 08:11:02   作者:努力的小雨  
這篇文章主要介紹了Python的內(nèi)置庫——小海龜(turtle),它是一個非常實用的繪畫工具,不僅可以幫助我們繪制圖形,還能讓我們查看整個繪畫過程,下面我們就來看看如何使用turtle繪制有趣的龍年祝福動畫吧

今天我們要介紹的是Python的內(nèi)置庫——小海龜(turtle),它是一個非常實用的繪畫工具,不僅可以幫助我們繪制圖形,還能讓我們查看整個繪畫過程。即使對繪畫一竅不通的人也能夠使用它來創(chuàng)作出生動、形象的gif動圖?,F(xiàn)在正是龍年即將到來,距離過年也只有幾天的時間了。因此,我今天的主要目的就是使用小海龜這個工具,畫一副我心目中的拜年gif,提前向大家拜個早年!

turtle

我也可以簡單地介紹一下turtle這個工具庫。簡而言之,turtle允許我們通過控制一個小海龜來繪制圖形。這只海龜?shù)钠瘘c坐標為(0,0),根據(jù)我們的指令,它可以按照我們給出的方向進行移動,并在移動過程中留下軌跡。最后,海龜會將軌跡顯示出來,從而形成我們想要的圖形。坐標的顯示方式是按照嚴格的四象限來劃分的。

當然,你有能力通過調(diào)整小海龜?shù)乃俣葋砜刂评L畫的速度。默認情況下,小海龜?shù)乃俣仍O置為最快的0,最慢的是1。你可以通過增加速度設置的數(shù)值來加快繪畫的速度,數(shù)值越接近10,繪畫速度就會越快。當速度設置超過10時,小海龜將會以0的速度進行繪畫。

另外,值得一提的是,使用這個小海龜工具時,你可以隨時將它重置到初始位置。此外,你還可以自由控制小海龜是否與繪圖區(qū)域接觸。換句話說,如果你不希望小海龜留下路徑,可以將它抬起,就像我們使用中性筆時抬起筆尖一樣。除此之外,其他方面沒有什么特別需要強調(diào)的了。

確實,使用這個小海龜工具進行繪圖確實需要花費一些精力。你需要逐步修改坐標、選擇顏色、改變方向等等。這整個過程的難度甚至比前端開發(fā)還要高。。

首先,我認為每逢過年,福字是必不可少的元素。因此,在我的繪圖中,福字是一個至關(guān)重要的元素,所以我首先會畫一個福字,然后再進行其他繪圖內(nèi)容。

相關(guān)api

turtle.bgcolor:設置背景顏色。主要是先練習,你自己選擇一個好看的顏色就行。

turtle.color:同時設置畫筆和填充顏色

turtle.speed:控制小海龜?shù)乃俣?/p>

turtle.penup:抬筆的動作,這樣的話,你再怎么動小海龜也不會有軌跡出現(xiàn)

turtle.pendown:放筆的動作,再動就要出現(xiàn)軌跡了

turtle.home:直接回到原點

turtle.forward:讓小海龜換方向

turtle.write:簡單的開始寫字,當然了,如果你不用這個api的話,按照你的提示軌跡,可以一筆一劃的寫出來一個字,這個api不會一筆一劃,就是簡單的把你想要的字放上去而已。

done:全部完成。不寫這個api的話,做完圖后,整個窗口會自動關(guān)閉。

讓我們先來欣賞一下我所創(chuàng)作的效果圖吧。

我很樂意與大家分享我所創(chuàng)作的效果圖,并附上源碼,供大家參考和學習。請看下方源碼:

import turtle              # 導入turtle庫(模塊)
turtle.bgcolor("#ffffff")  # 設置背景顏色為
turtle.speed(7)
# turtle.speed(10)        # 可減慢畫正方形和寫字的速度

### ②畫灰色陰影
turtle.color("#404040")   # 同時設置畫筆和填充顏色都為#404040,一種深灰色。
a=100                     # 正方形內(nèi)等腰直角三角形的直角邊為a
b=2**0.5*a                # 斜邊為b ,等腰直角三角形的斜邊=√2倍的直角邊

turtle.penup()
turtle.goto(-210,180)             # 步驟1光束畫完后,讓海龜返回原點,即海龜移動至坐標(0,0),并設置朝向為初始方向(向右)。
turtle.forward(a)
turtle.pendown()

turtle.begin_fill()
turtle.left(135)
turtle.forward(b)
turtle.left(90)
turtle.forward(b)
turtle.left(90)
turtle.forward(b)
turtle.left(90)
turtle.forward(b)
turtle.end_fill()

### ③ 畫正方形紅紙
turtle.color("#ea182a")   # 同時設置畫筆和填充顏色都為#ea182a,一種紅色。
a=100
b=2**0.5*a

turtle.penup()
turtle.home()     # 第2步灰色陰影畫完后,讓海龜返回原點,即海龜移動至坐標(0,0),并設置朝向為初始方向(向右)。
turtle.goto(-205,180)
turtle.forward(a)
turtle.pendown()

turtle.begin_fill()
turtle.left(135)
turtle.forward(b)
turtle.left(90)
turtle.forward(b)
turtle.left(90)
turtle.forward(b)
turtle.left(90)
turtle.forward(b)
turtle.end_fill()

### ④ 寫文字“?!?
turtle.color("black")
turtle.penup()
turtle.goto(-210,175)            # 讓海龜返回原點
turtle.setheading(-90)   # 讓海龜頭部朝下
turtle.forward(50)      # 讓海龜向下移動150個像素。這個數(shù)字需要不斷調(diào)試。
turtle.pendown()
turtle.write("福", align="center",font=("黑體",90,"bold"))

### 海龜繪圖結(jié)束,隱藏海龜
turtle.hideturtle()
turtle.done()

賦詩一首

在這個喜慶的新年時刻,作為作者我承認自己的語文水平有限,并不擅長寫春聯(lián)。不過,我想簡單地為大家奉上一首詩作《元日》,以表達我的祝福。希望大家喜歡,祝愿大家新年快樂!

涉及api

turtle.pensize:就是我們要使用多大號的筆。越大線條越粗。

turtle.shape:顯示一下小海龜?shù)男螤?/p>

turtle.hideturtle:隱藏小海龜?shù)男螤?,因為作畫的時候 ,默認時顯示小海龜?shù)?,如果你不想看見他直接隱藏即可。

首先,讓我們一起觀看一下我所準備的效果圖吧。在此我想強調(diào)一點,效果圖中的小箭頭是由于生成gif時產(chǎn)生的,實際效果并沒有這些箭頭存在。

同樣源碼附上,給大家一個參考:

# 海龜寫古詩《元日》
### 程序初始化設置
import turtle
turtle.bgcolor("#b1352b")     # 設置背景顏色為#b1352b,一種紅色。ffffff為白色
turtle.speed(0)               # 設置海龜繪圖的速度,參數(shù)為0時最快
turtle.pensize(1)             # 設置畫筆粗細,即豎線的粗線為1
turtle.pencolor("#f2ea99")    # 設置畫筆顏色,即豎線和書法的顏色為#f2ea99,一種黃色。000000為黑色

fontname="黑體"                # 字體名稱
fontsize=35                   # 字體大小
column1="爆竹聲中一歲除"        # column是列的英文單詞
column2="春風送暖入屠蘇"
column3="千門萬戶曈曈日"
column4="總把新桃換舊符"
column5="宋王安石元日"
column6="努力的小雨書"
colwidth=100                  # 設置列寬colwidth

### ① 畫豎線
x=245                         # 確定第一條豎線頂端的橫坐標
y=230                         # 確定第一條豎線頂端的縱坐標
for i in range(6):            # 循環(huán)6次,畫6根豎線
    turtle.penup()            # 海龜抬筆,沒有移動(繪畫)痕跡
    turtle.goto(x,y)          # 海龜移動至坐標(x,y)
    turtle.pendown()          # 海龜落筆,移動(繪畫)有痕跡
    turtle.setheading(-90)    # 讓海龜?shù)念^部朝下
    turtle.forward(460)       # 讓海龜前進460個像素,即豎線的長度是460像素
    x=x-colwidth              # 將橫坐標重新賦值為原橫坐標減去列寬colwidth

### ② 海龜寫詩《元日》
turtle.speed(5)               # 重新設置海龜寫字的速度
# 寫第1列
x=200                         # 設置第1列文字第1個字的橫坐標
y=160                         # 設置第1列文字第1個字的縱坐標
for i in range(7):            # 第1列共顯示7個字,所以循環(huán)7次
    turtle.penup()            # 海龜抬筆,沒有移動(繪畫)痕跡
    turtle.goto(x,y)          # 海龜移動至坐標(x,y)
    turtle.pendown()          # 海龜落筆,移動(繪畫)有痕跡
    turtle.write(column1[i], align="center",font=(fontname,fontsize,"normal"))
    y=y-60                    # 每個字間隔60個像素

# 寫第2列
x=x-colwidth
y=160
for i in range(7):             # 第2列共顯示7個字,所以循環(huán)7次
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.write(column2[i], align="center",font=(fontname,fontsize))  #第3個參數(shù)省略時默認為"normal"
    y=y-60

# 寫第3列
x=x-colwidth
y=160
for i in range(7):
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.write(column3[i], align="center",font=(fontname,fontsize))
    y=y-60

# 寫第4列
x=x-colwidth
y=160
for i in range(7):
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.write(column4[i], align="center",font=(fontname,fontsize))
    y=y-60

### ③ 寫落款
# 寫第5列
x=x-80                       # 設置第5列第一個字的橫坐標位置
y=100                        # 設置第5列第一個字的縱坐標位置
for i in range(6):           # 第5列共顯示6個字,所以循環(huán)6次
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.write(column5[i], align="center",font=(fontname,20,))
    y=y-30                   # 落款每個字的間隔是30。字小間隔也要小

# 寫第6列
x=x-40
y=100
for i in range(6):           # 第6列共顯示9個字,所以循環(huán)9次
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.write(column6[i], align="center",font=(fontname,20))
    y=y-30

turtle.penup()
turtle.forward(10)
turtle.pendown()
turtle.setheading(0)         # 讓海龜?shù)念^部朝右
turtle.color("#e1f4d6")      # 設置海龜顯示的顏色
turtle.shape("classic")       # 設置海龜顯示的形狀

# 海龜寫完水印文字后,返回原點
turtle.penup()    
turtle.home()              
turtle.pendown()
turtle.done()

煙花

在過年期間,若是不放煙花,咋都說不過去。然而,單獨談論煙花確實很難創(chuàng)作,因為它是一種行動,與福字和詩歌不同。煙花必須要有動勢,也不能忽略煙花自身需要逐漸消失的特點。這其中存在著許多難題,因為一旦消失了,我之前寫的詩句和文字都會消失,就白費功夫了。

一頓搜索下才查找到了回滾這么一個動作。但是回滾這個動作不能讓人看見啊,一個煙花放完了總不能自己還能再縮回去啊,所以又繼續(xù)查,發(fā)現(xiàn)了類似于快進這樣一個功能,讓你看不見中間的流程直接輸出結(jié)果。

終于,我期盼已久的煙火終于來臨。然而,我不愿讓它自行燃放,我想親自參與其中,為大家拜個早年。因此,我決定將煙花的燃放變得更有趣,設計成只有在點擊鼠標后才能綻放。

設計api

turtle.tracer:是否顯示軌跡

turtle.getscreen():獲取整個屏幕,因為我們要鼠標的點擊事件。

turtle.undo():這個就是做回滾操作的,但是如果你不想看見動作,你需要和下一個api連用。

turtle.tracer:這個方法里面有一個delay,可以在幾毫秒中跳過多少個步驟。這個需要你計算。

src.onclick(follow):發(fā)送點擊事件,注意這個follow函數(shù)自動傳入兩個參數(shù)也就是x,y兩個坐標值。

讓我們先來欣賞一下效果圖吧。盡管它的外觀可能不是非常出色,但總體而言,我對它還是比較滿意的。

同樣的源碼附上,給大家一個參考:

import turtle
import time
import random
from turtle import *

colors = ['red', 'blue', 'yellow', 'white',
            'green', 'orange', 'purple', 'seagreen',
            'indigo', 'cornflowerblue']

turtle.tracer(False)
turtle.ht()
src = turtle.getscreen() 

def draw_firework(count, dis, ang):
    for c in range(count):
        forward(dis)
        left(ang)        
        
def follow(startx,starty):
    need_list = [] 
    ccol = random.choice(colors)
    dist = random.randint(50, 80)
    if dist <= 60:
        angle = 171
    else:
        angle = random.choice([174, 175, 176])
    add = (dist - 30) / 10
    count = int(360 / (180 - angle))
    need_list.append([startx, starty, ccol, dist, angle, add, count])
    draw(need_list)

def draw(lis):
    pensize(2)
    for t in range(5):
        for li in lis:
            x, y, col, dis, ang, add, count = li
            penup(), goto(x - t * add / 2, y), pendown()
            color('#b1352b', col)
            begin_fill()
            setheading(0)
            draw_firework(count, t * add + 30, ang)
            end_fill()
        update()
        time.sleep(0.015)
        print('tracer-',tracer())
        print('count-',count)
        turtle.tracer(count*2+8,1)
        for i in range(count*2+8):
            undo()
    turtle.ht() 
    pensize(5)
    for t in range(10):
        for li in lis:
            x, y, col, dis, ang, add, count = li
            count = int(count / 4)
            penup(), goto(x - add * 5 + 10, y), pendown()
            setheading(-90)
            stara = dis / 2 - 10
            penup(), left(90), backward(2 * t), right(90)
            for i in range(count):
                penup()
                pencolor(col)
                circle(stara + t * 2, 360 / count - 1)
                pendown()
                circle(stara + t * 2, 1)
        update()
        time.sleep(0.03)
        # clear()
        turtle.tracer(count*4,1)
        for i in range(count*4):
            undo()

turtle.ht()
src.onclick(follow)
turtle.done()

龍年快樂

所有的元素都已經(jīng)完成,剩下的只需拼裝在一起。我覺得這里的背景顯得過于單一,所以我決定直接使用一張圖作為背景。當然,如果你有時間,完全可以自己單獨制作一張背景圖。不多說了,祝福大家龍年快樂!愿你們的生活像龍一樣充滿力量和勇氣,愿你們在新的一年里,追逐夢想,勇往直前,不斷超越自我。愿你們的家庭幸福美滿,團圓和諧。愿你們的事業(yè)蒸蒸日上,財源廣進。愿你們的身體健康強壯,心靈充實。讓我們一起慶祝龍年,共同創(chuàng)造美好的未來!

以上就是Python使用turtle繪制有趣的龍年祝福動畫的詳細內(nèi)容,更多關(guān)于Python turtle繪制動畫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python爬蟲框架feapder的使用簡介

    python爬蟲框架feapder的使用簡介

    這篇文章主要介紹了python爬蟲框架feapde的使用簡介,幫助大家更好的理解和學習使用python爬蟲,感興趣的朋友可以了解下
    2021-04-04
  • Langchain集成管理prompt功能詳解

    Langchain集成管理prompt功能詳解

    這篇文章主要為大家介紹了Langchain集成管理prompt功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 利用Python實現(xiàn)最小二乘法與梯度下降算法

    利用Python實現(xiàn)最小二乘法與梯度下降算法

    這篇文章主要介紹了利用Python實現(xiàn)最小二乘法與梯度下降算法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • PySpark與GraphFrames的安裝與使用環(huán)境搭建過程

    PySpark與GraphFrames的安裝與使用環(huán)境搭建過程

    這篇文章主要介紹了PySpark與GraphFrames的安裝與使用教程,本文通過圖文并茂實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Python元類基礎知識示例深度剖析

    Python元類基礎知識示例深度剖析

    這篇文章主要為大家介紹了Python元類基礎知識深度剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • python pandas合并Sheet,處理列亂序和出現(xiàn)Unnamed列的解決

    python pandas合并Sheet,處理列亂序和出現(xiàn)Unnamed列的解決

    這篇文章主要介紹了python pandas合并Sheet,處理列亂序和出現(xiàn)Unnamed列的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python實現(xiàn)連接FTP并下載文件夾

    Python實現(xiàn)連接FTP并下載文件夾

    這篇文章主要為大家介紹了如何利用Python實現(xiàn)鏈接FTP服務器,并下載相應的文件夾,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-03-03
  • python多種數(shù)據(jù)類型輸出為Excel文件

    python多種數(shù)據(jù)類型輸出為Excel文件

    本文主要介紹了將Python中的列表、元組、字典和集合等數(shù)據(jù)類型輸出到Excel文件中,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Python直接使用plot()函數(shù)畫圖的方法實例

    Python直接使用plot()函數(shù)畫圖的方法實例

    Python非常簡單而又非常強大,它的功能之一就是畫出漂亮的圖表,實現(xiàn)數(shù)據(jù)的可視化,下面這篇文章主要給大家介紹了關(guān)于Python直接使用plot()函數(shù)畫圖的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • python 如何比較字符串是否一樣

    python 如何比較字符串是否一樣

    這篇文章主要介紹了python 如何比較字符串是否一樣的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論