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

使用Python繪制可愛的招財(cái)貓

 更新時間:2025年01月09日 10:14:54   作者:AI技術(shù)控  
招財(cái)貓,也被稱為“幸運(yùn)貓”,是一種象征財(cái)富和好運(yùn)的吉祥物,經(jīng)常出現(xiàn)在亞洲文化的商店、餐廳和家庭中,今天,我將帶你用 Python 和 matplotlib 庫從零開始繪制一只可愛的卡通招財(cái)貓,感興趣的小伙伴跟著小編一起來看看吧

本篇博客不僅適合對 Python 繪圖感興趣的開發(fā)者,還能幫助你了解如何利用 matplotlib 繪制復(fù)雜的卡通形象。不需要額外圖片資源,一切都用代碼實(shí)現(xiàn)!

1. 為什么選擇用 Python 繪制?

繪制卡通形象通常需要設(shè)計(jì)工具(例如 Photoshop 或 Illustrator),但通過 Python,我們可以:

  • 全面掌控每一部分的比例和顏色:所有幾何形狀均由代碼生成,你可以精確調(diào)整它們的位置、大小和顏色。
  • 程序化生成和復(fù)用:繪制的招財(cái)貓代碼可以用作模板,方便生成不同樣式和設(shè)計(jì)的圖案。
  • 學(xué)習(xí)數(shù)學(xué)和編程技巧:繪制圖形涉及幾何學(xué)、坐標(biāo)系統(tǒng)和編程邏輯。

如果你是一個數(shù)據(jù)分析師或開發(fā)者,這個過程會讓你對 matplotlib 的藝術(shù)應(yīng)用有更深的體會!

2. 繪圖的基本概念

在 Python 中,我們將使用以下方法和模塊完成繪制任務(wù):

  • matplotlib.patches 模塊
    • 提供了繪制基本幾何圖形的功能,例如圓形、橢圓形、多邊形等。
    • 通過 Circle、EllipsePolygon 等來構(gòu)建復(fù)雜的卡通形象。
  • matplotlib.pyplot 模塊
    • 提供了繪圖區(qū)域(Figure)和坐標(biāo)軸(Axes)。
    • 幫助我們將圖形添加到畫布上,并進(jìn)行整體調(diào)整。

要繪制一只完整的招財(cái)貓,我們需要將各個部分分解為基礎(chǔ)幾何形狀,如下所示:

部件幾何形狀示例
頭部和身體圓形、橢圓CircleEllipse
耳朵三角形Polygon
五官(眼、鼻、嘴)弧線和圓形ArcCircle
胡須直線plot
手和腳橢圓形Ellipse
裝飾物(鈴鐺、卷軸等)圓形、長方形CircleFancyBboxPatch

3. 實(shí)現(xiàn)代碼解析

以下是完整代碼,按模塊逐步解析。

3.1 設(shè)置繪圖畫布

我們首先創(chuàng)建繪圖畫布,并設(shè)置招財(cái)貓的坐標(biāo)系范圍。注意:需要關(guān)閉坐標(biāo)軸,以便突出卡通形象。

import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Ellipse, Polygon, FancyBboxPatch, Arc
 
# 創(chuàng)建畫布
fig, ax = plt.subplots(figsize=(6, 8))
ax.set_xlim(-10, 10)
ax.set_ylim(-12, 12)
ax.axis('off')  # 隱藏坐標(biāo)軸

3.2 繪制頭部和身體

招財(cái)貓的頭部身體由一個大圓和一個橢圓組成。

# 繪制身體
body = Ellipse((0, -2), width=12, height=14, color='white', edgecolor='black', linewidth=2)
ax.add_patch(body)
 
# 繪制頭部
head = Circle((0, 5), radius=5, color='white', edgecolor='black', linewidth=2)
ax.add_patch(head)

3.3 繪制耳朵和內(nèi)部細(xì)節(jié)

耳朵由兩個三角形構(gòu)成,分別是外部的白色耳朵和內(nèi)部的紅色部分。

# 外部耳朵
left_ear = Polygon([[-4, 8], [-6, 12], [-2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)
right_ear = Polygon([[4, 8], [6, 12], [2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)
ax.add_patch(left_ear)
ax.add_patch(right_ear)
 
# 內(nèi)部耳朵
left_inner_ear = Polygon([[-4.5, 8.5], [-5.5, 11], [-3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)
right_inner_ear = Polygon([[4.5, 8.5], [5.5, 11], [3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)
ax.add_patch(left_inner_ear)
ax.add_patch(right_inner_ear)

3.4 繪制五官

招財(cái)貓的五官以弧線和圓形為主,營造出微笑的效果。

# 笑眼
left_eye = Arc((-2, 6), width=2, height=1, theta1=0, theta2=180, color='black', linewidth=2)
right_eye = Arc((2, 6), width=2, height=1, theta1=0, theta2=180, color='black', linewidth=2)
ax.add_patch(left_eye)
ax.add_patch(right_eye)
 
# 鼻子和嘴巴
nose = Circle((0, 5), radius=0.2, color='black')
ax.add_patch(nose)
mouth_left = Arc((-0.5, 4.6), width=1, height=0.5, theta1=0, theta2=-180, color='black')
mouth_right = Arc((0.5, 4.6), width=1, height=0.5, theta1=0, theta2=-180, color='black')
ax.add_patch(mouth_left)
ax.add_patch(mouth_right)

3.5 繪制裝飾物和肚子文字

  • 項(xiàng)圈和鈴鐺: 
# 項(xiàng)圈
collar = Ellipse((0, 3.5), width=8, height=1.5, color='red', edgecolor='black', linewidth=2)
ax.add_patch(collar)
 
# 鈴鐺
bell = Circle((0, 2.5), radius=0.8, color='gold', edgecolor='black', linewidth=2)
bell_inner = Circle((0, 2.5), radius=0.3, color='black')
ax.add_patch(bell)
ax.add_patch(bell_inner)
  • 紅色卷軸和文字: 

# 紅色卷軸
scroll = FancyBboxPatch((6, -2), width=1.5, height=5, boxstyle="round,pad=0.1", color='red', edgecolor='black', linewidth=2)
ax.add_patch(scroll)
ax.text(6.75, 0.5, "招財(cái)\n進(jìn)寶", color='black', fontsize=10, ha='center', va='center', rotation=90)
  • 肚子上的“福 ”字

# 福字
ax.text(0, -3, "福", color='red', fontsize=30, ha='center', va='center')

4. 完整代碼

將所有部分整合在一起:

import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Ellipse, Polygon, FancyBboxPatch, Arc
 
def draw_lucky_cat():
    fig, ax = plt.subplots(figsize=(6, 8))
    ax.set_xlim(-10, 10)
    ax.set_ylim(-12, 12)
    ax.axis('off')
 
    # 繪制身體
    body = Ellipse((0, -2), width=12, height=14, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(body)
 
    # 繪制頭部
    head = Circle((0, 5), radius=5, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(head)
 
    # 繪制耳朵
    left_ear = Polygon([[-4, 8], [-6, 12], [-2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)
    right_ear = Polygon([[4, 8], [6, 12], [2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(left_ear)
    ax.add_patch(right_ear)
    
    # 耳朵內(nèi)部
    left_inner_ear = Polygon([[-4.5, 8.5], [-5.5, 11], [-3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)
    right_inner_ear = Polygon([[4.5, 8.5], [5.5, 11], [3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)
    ax.add_patch(left_inner_ear)
    ax.add_patch(right_inner_ear)
 
    # 繪制眼睛
    left_eye = Ellipse((-2, 6), width=1, height=0.5, color='black')
    right_eye = Ellipse((2, 6), width=1, height=0.5, color='black')
    ax.add_patch(left_eye)
    ax.add_patch(right_eye)
 
    # 繪制鼻子
    nose = Ellipse((0, 5), width=0.5, height=0.3, color='black')
    ax.add_patch(nose)
 
    # 繪制嘴巴
    mouth_left = Arc((-0.5, 4.5), width=1, height=0.5, theta1=0, theta2=-180, color='black')
    mouth_right = Arc((0.5, 4.5), width=1, height=0.5, theta1=0, theta2=-180, color='black')
    ax.add_patch(mouth_left)
    ax.add_patch(mouth_right)
 
    # 繪制胡須
    ax.plot([-3, -6], [5.5, 5.8], color='black', linewidth=1)
    ax.plot([-3, -6], [5, 5], color='black', linewidth=1)
    ax.plot([-3, -6], [4.5, 4.2], color='black', linewidth=1)
    ax.plot([3, 6], [5.5, 5.8], color='black', linewidth=1)
    ax.plot([3, 6], [5, 5], color='black', linewidth=1)
    ax.plot([3, 6], [4.5, 4.2], color='black', linewidth=1)
 
    # 繪制紅色項(xiàng)圈
    collar = Ellipse((0, 3), width=8, height=2, color='red', edgecolor='black', linewidth=2)
    ax.add_patch(collar)
 
    # 繪制鈴鐺
    bell = Circle((0, 2.3), radius=0.8, color='gold', edgecolor='black', linewidth=2)
    bell_inner = Circle((0, 2.3), radius=0.3, color='black')
    ax.add_patch(bell)
    ax.add_patch(bell_inner)
 
    # 繪制左手和金幣
    left_hand = Ellipse((-5, -2), width=3, height=6, angle=30, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(left_hand)
    coin = Ellipse((-7, -1.5), width=3, height=2, color='gold', edgecolor='black', linewidth=2)
    ax.add_patch(coin)
 
    # 繪制右手和紅色卷軸
    right_hand = Ellipse((5, -2), width=3, height=6, angle=-30, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(right_hand)
    scroll = FancyBboxPatch((6, -2), width=1.5, height=5, boxstyle="round,pad=0.1", color='red', edgecolor='black', linewidth=2)
    ax.add_patch(scroll)
    ax.text(6.75, 0, "招財(cái)\n進(jìn)寶", color='black', fontsize=10, ha='center', va='center', rotation=90)
 
    # 繪制腳
    left_foot = Ellipse((-3, -9), width=3, height=2, color='white', edgecolor='black', linewidth=2)
    right_foot = Ellipse((3, -9), width=3, height=2, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(left_foot)
    ax.add_patch(right_foot)
 
    # 繪制肚子上的 "福" 字
    ax.text(0, -3, "福", color='red', fontsize=30, ha='center', va='center')
 
    plt.show()
 
draw_lucky_cat()

最終效果

運(yùn)行本文的代碼后,我們將獲得如下所示的可愛卡通招財(cái)貓:

從運(yùn)行結(jié)果來看,當(dāng)前繪圖效果和預(yù)期的細(xì)節(jié)相去甚遠(yuǎn),需要進(jìn)一步優(yōu)化來更好優(yōu)化招財(cái)貓形象。以下是對代碼的優(yōu)化建議和改進(jìn)版代碼:

優(yōu)化建議

  1. 頭部和身體比例:目前身體和頭部的比例以及位置沒有調(diào)整好,應(yīng)該讓頭部顯得更大,同時調(diào)整身體位置。
  2. 耳朵和五官細(xì)節(jié):耳朵形狀可以更接近原圖的尖銳感,眼睛需要弧形的笑眼,鼻子和嘴巴也需要更加擬合。
  3. 裝飾物和手臂:紅色項(xiàng)圈、鈴鐺以及手臂的位置要更準(zhǔn)確,尤其是左手抱著的金幣和右手的卷軸。
  4. 肚子上的福字:調(diào)整字體大小和位置,使其更貼合身體。
  5. 整體布局:對位置和比例重新調(diào)整,讓招財(cái)貓整體更加協(xié)調(diào)。

改進(jìn)后的代碼

以下是優(yōu)化版的代碼,包含上述改進(jìn):

import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Ellipse, Polygon, FancyBboxPatch, Arc
 
def draw_optimized_lucky_cat():
    fig, ax = plt.subplots(figsize=(6, 8))
    ax.set_xlim(-10, 10)
    ax.set_ylim(-12, 12)
    ax.axis('off')
 
    # 繪制身體
    body = Ellipse((0, -2), width=12, height=14, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(body)
 
    # 繪制頭部
    head = Circle((0, 5), radius=5, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(head)
 
    # 繪制耳朵
    left_ear = Polygon([[-4, 8], [-6, 12], [-2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)
    right_ear = Polygon([[4, 8], [6, 12], [2, 10]], closed=True, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(left_ear)
    ax.add_patch(right_ear)
    
    # 耳朵內(nèi)部
    left_inner_ear = Polygon([[-4.5, 8.5], [-5.5, 11], [-3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)
    right_inner_ear = Polygon([[4.5, 8.5], [5.5, 11], [3.5, 9.5]], closed=True, color='red', edgecolor='black', linewidth=1)
    ax.add_patch(left_inner_ear)
    ax.add_patch(right_inner_ear)
 
    # 繪制笑眼
    left_eye = Arc((-2, 6), width=2, height=1, theta1=0, theta2=180, color='black', linewidth=2)
    right_eye = Arc((2, 6), width=2, height=1, theta1=0, theta2=180, color='black', linewidth=2)
    ax.add_patch(left_eye)
    ax.add_patch(right_eye)
 
    # 繪制鼻子和嘴巴
    nose = Circle((0, 5), radius=0.2, color='black')
    ax.add_patch(nose)
    mouth_left = Arc((-0.5, 4.6), width=1, height=0.5, theta1=0, theta2=-180, color='black')
    mouth_right = Arc((0.5, 4.6), width=1, height=0.5, theta1=0, theta2=-180, color='black')
    ax.add_patch(mouth_left)
    ax.add_patch(mouth_right)
 
    # 繪制胡須
    ax.plot([-3, -6], [5.5, 5.8], color='black', linewidth=1)
    ax.plot([-3, -6], [5, 5], color='black', linewidth=1)
    ax.plot([-3, -6], [4.5, 4.2], color='black', linewidth=1)
    ax.plot([3, 6], [5.5, 5.8], color='black', linewidth=1)
    ax.plot([3, 6], [5, 5], color='black', linewidth=1)
    ax.plot([3, 6], [4.5, 4.2], color='black', linewidth=1)
 
    # 繪制紅色項(xiàng)圈
    collar = Ellipse((0, 3.5), width=8, height=1.5, color='red', edgecolor='black', linewidth=2)
    ax.add_patch(collar)
 
    # 繪制鈴鐺
    bell = Circle((0, 2.5), radius=0.8, color='gold', edgecolor='black', linewidth=2)
    bell_inner = Circle((0, 2.5), radius=0.3, color='black')
    ax.add_patch(bell)
    ax.add_patch(bell_inner)
 
    # 繪制左手和金幣
    left_hand = Ellipse((-4.5, -2), width=3, height=5, angle=30, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(left_hand)
    coin = Ellipse((-7, -1.5), width=3, height=2, color='gold', edgecolor='black', linewidth=2)
    ax.add_patch(coin)
 
    # 繪制右手和紅色卷軸
    right_hand = Ellipse((4.5, -2), width=3, height=5, angle=-30, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(right_hand)
    scroll = FancyBboxPatch((6, -2), width=1.5, height=5, boxstyle="round,pad=0.1", color='red', edgecolor='black', linewidth=2)
    ax.add_patch(scroll)
    ax.text(6.75, 0.5, "招財(cái)\n進(jìn)寶", color='black', fontsize=10, ha='center', va='center', rotation=90)
 
    # 繪制腳
    left_foot = Ellipse((-3, -8.5), width=3, height=2, color='white', edgecolor='black', linewidth=2)
    right_foot = Ellipse((3, -8.5), width=3, height=2, color='white', edgecolor='black', linewidth=2)
    ax.add_patch(left_foot)
    ax.add_patch(right_foot)
 
    # 繪制肚子上的 "福" 字
    ax.text(0, -3, "福", color='red', fontsize=30, ha='center', va='center')
 
    plt.show()
 
draw_optimized_lucky_cat()

改進(jìn)后的效果

運(yùn)行優(yōu)化后的代碼,你會發(fā)現(xiàn):

  • 五官更生動:笑眼、鼻子和嘴巴更符合卡通形象。
  • 裝飾完整:項(xiàng)圈、鈴鐺、金幣、紅色卷軸都已正確放置。
  • 整體比例協(xié)調(diào):身體、頭部和手臂的位置調(diào)整后更加真實(shí)。
  • 細(xì)節(jié)更加精細(xì):如耳朵的內(nèi)外填充色、肚子上的福字等。

5. 運(yùn)行效果

運(yùn)行代碼后,你將看到一只生動的卡通招財(cái)貓!這只貓手持金幣和紅色卷軸,搭配經(jīng)典的笑眼與鈴鐺,非常適合用于海報(bào)設(shè)計(jì)、賀卡或編程練習(xí)。

6. 總結(jié)與學(xué)習(xí)心得

通過這篇教程,你不僅學(xué)會了如何用 Python 繪制一只完整的卡通招財(cái)貓,還熟悉了 matplotlib.patches 模塊的強(qiáng)大之處。試想一下,未來你可以用類似的方法繪制其他卡通形象,甚至設(shè)計(jì)屬于自己的吉祥物!

以上就是使用Python繪制可愛的招財(cái)貓的詳細(xì)內(nèi)容,更多關(guān)于Python繪制招財(cái)貓的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python描述數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之哈夫曼樹篇

    Python描述數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之哈夫曼樹篇

    這篇文章主要給大家介紹了關(guān)于Python描述數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之哈夫曼樹篇的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 自動化測試Pytest單元測試框架的基本介紹

    自動化測試Pytest單元測試框架的基本介紹

    這篇文章主要介紹了Pytest單元測試框架的基本介紹,包含了Pytest的概念,Pytest特點(diǎn),其安裝流程步驟以及相關(guān)配置流程,有需要的朋友可以參考下
    2021-08-08
  • 5款非常棒的Python工具

    5款非常棒的Python工具

    這篇文章主要為大家詳細(xì)介紹了5款非常棒的Python工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python開啟線程,在函數(shù)中開線程的實(shí)例

    Python開啟線程,在函數(shù)中開線程的實(shí)例

    今天小編就為大家分享一篇Python開啟線程,在函數(shù)中開線程的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python定義一個跨越多行的字符串的多種方法小結(jié)

    Python定義一個跨越多行的字符串的多種方法小結(jié)

    今天小編就為大家分享一篇Python定義一個跨越多行的字符串的多種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python正則表達(dá)式經(jīng)典入門教程

    Python正則表達(dá)式經(jīng)典入門教程

    這篇文章主要介紹了Python正則表達(dá)式,結(jié)合具體實(shí)例形式歸納總結(jié)了Python正則表達(dá)式中常用的各種函數(shù)與相關(guān)使用技巧,需要的朋友可以參考下
    2017-05-05
  • Python 互換字典的鍵值對實(shí)例

    Python 互換字典的鍵值對實(shí)例

    今天小編就為大家分享一篇Python 互換字典的鍵值對實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python獲取元素在數(shù)組中索引號的方法

    python獲取元素在數(shù)組中索引號的方法

    這篇文章主要介紹了python獲取元素在數(shù)組中索引號的方法,實(shí)例分析了Python中index方法的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 詳解Python垃圾回收機(jī)制和常量池的驗(yàn)證

    詳解Python垃圾回收機(jī)制和常量池的驗(yàn)證

    這篇文章主要介紹了詳解Python垃圾回收機(jī)制和常量池的驗(yàn)證,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python面向?qū)ο蠖鄳B(tài)實(shí)現(xiàn)原理及代碼實(shí)例

    Python面向?qū)ο蠖鄳B(tài)實(shí)現(xiàn)原理及代碼實(shí)例

    這篇文章主要介紹了Python面向?qū)ο蠖鄳B(tài)實(shí)現(xiàn)原理及代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評論