
明天是難得一見的國慶中秋雙節合一,在這裡除了祝大家節日快樂之外,我們還要送上一個“月餅”——當然這個月餅是不能吃的,因為它是用python做的。先給大家看一下效果圖。
圖1. 月餅效果圖
畫這樣一個月餅,其實不需要太多的代碼,筆者隻用了不到50行代碼,而且用的是我們經常用到的繪圖庫matplotlib,這對于我們大部分人來說是很容易上手的,下面筆者就詳細介紹一下怎麼畫這樣一個月餅。
首先導入各種需要的庫:
import
然後設定3個變量,這3個變量的用途到後面會有解釋:
length
接下來我們要畫12條弧線,這12條弧線是月餅邊緣的花紋:
arc1
看到這裡估計很多人懵逼了,代碼是不是有點多了?實際上這些弧線都是來自于同一個Arc類,它們的用法都是一樣的,隻不過部分參數不同,是以我們隻要掌握一個,其他的全都會了。這裡筆者就用arc1來說明一下:
arc1
其中
[0, length]是這個Arc弧線的圓心,因為這個Arc類是一個橢圓形的一部分,是以其包含圓心、橫軸、縱軸等參數,
length變量就是arc1圓心的縱坐标,
width=2*r和
height=2*r就說明這個橢圓的縱軸和橫軸長度相等,其是一個圓,而不是橢圓,變量
r就是這個圓的半徑。
angle=0就是我們不需要對這個圓進行旋轉,
theta1=30和
theta2=150是指明這個弧線的起始角度和終止角度,這裡的角度分别是
30度和
150度。而
ec='orange'和
linewidth=4分别指邊線的顔色和線條寬度,顔色我們設為
橙色,
寬度為4。而這些弧線的效果圖如圖2所示,在圖中筆者标出了arc1、arc5和arc9這3條弧線的位置,所有弧線按照
逆時針方向排列。這些位置大同小異,大家隻要計算好其各自的位置參數就行,這裡就不再贅述了。
圖2. 弧線效果圖
然後我們再畫一個圓,這個圓是月餅的主體部分,其圓心和整個月餅的中心是重合的,圓心位置我們選在了坐标原點,代碼如下:
circle
這裡變量R就是這個大圓的半徑,邊線顔色設定為橙色,表面顔色設為白色。其效果如圖3所示。
圖3. 大圓效果圖
接下來我們再畫上一些花紋,這些花紋主要由8個扇形組成,其中有4個大的扇形和4個小的扇形,代碼如下:
wedge1
這裡wedge1、wedge3、wedge5、wedge7是大扇形,wedge2、wedge4、wedge6、wedge8是小扇形,一個大扇形嵌套一個小扇形,其中wedge1嵌套wedge2,wedge3嵌套wedge4,以此類推。Wedge這個類和前面Arc有些類似,不過Wedge是圓的一部分,以wedge1為例:
wedge1
其中
[-2, 2]是這個Wedge所代表的圓的圓心,
R-5是其半徑,
90和
180分别代表起始和終止角度,
ec、
fc和
linewidth這些都和前面Arc類的用法相似,這8個扇形的效果圖如圖4所示。在圖中筆者标出了wedge1、wedge2、wedge5和wedge6的位置,所有扇形按照逆時針方向放置。
圖4. 扇形效果圖
最後我們再把公衆号“
CROSSIN”的名稱加上,因為代碼不多,是以把剩餘所有代碼都寫在這裡:
art_list
art_list是我們設定的一個list變量,裡面放有arc1到arc12這12個圖形,然後再把circle以及8個扇形都加進去。
ax.set_aspect('equal')是設定整個圖形x軸和y軸同比例,
for a in art_list: ax.add_patch(a)是把art_list中所有圖形加入到畫布當中。而
plt.text這行代碼中,-18和-2.5是這個text的左下角的坐标,
fontfamily和
fontsize分别是文字的字型和大小,
bbox是設定text邊框的格式,這些參數也都和前面講過的很多參數差不多,這裡不再贅述。
plt.ylim和
plt.xlim是設定整個畫布的坐标範圍。最終效果如圖1所示。
當然我們也可以改變圖檔的顔色,比如設定成藍色的,如圖5所示,這個完全可以根據個人愛好而定。
圖5. 藍色月餅圖
筆者在這裡用了不到50行代碼就畫出了一個月餅,其中還有不少複用的,是以核心隻有幾個繪圖函數,了解起來并不難。你也可以自己動手試一試,定制一塊你自己的月餅。
最後再次祝大家,中秋快樂!國慶快樂!
作者:tyran
完整代碼: https:// gitee.com/crossin/snipp et/tree/master/mooncake
----
擷取更多教程和案例,
歡迎搜尋及關注:
Crossin的程式設計教室這裡還有更多精彩。一起學,走得遠!