1、原材料1.1 花燈紙如下所示,還可以加上自己喜歡的圖案、文字等。
2.2 Python環境和模塊
一台安裝了Python環境的電腦,Python環境需要安裝以下模塊。
幹貨主要有:① 200 多本 Python 電子書(和經典的書籍)應該有
② Python标準庫資料(最全中文版)
③ 項目源碼(四五十個有趣且可靠的練手項目及源碼)
④ Python基礎入門、爬蟲、網絡開發、大數據分析方面的視頻(适合小白學習)
⑤ Python學習路線圖(告别不入流的學習)私信小編01即可獲取大量Python學習資源
numpy
pillow
wxgl
如果沒有上述模塊,請參考下面的命令安裝。
pip install numpy
pip install pillow
pip install wxgl
3.源代碼
#元宵節就要到了,花燈要不要來一盞?3D的那種
# -*- coding: utf-8 -*-
import numpy as np
from PIL import Image
import wxgl.wxplot as plt
im = np.array(Image.open('D:/Lantern/venv/res/paper.png'))/255
rows, cols, deep = im.shape
#np.pi=π rows=燈籠高 cols=燈籠底圓的周長
r, h = 1, 2*np.pi*rows/cols
# r=1.5 h=2.66
#制作半徑1個單位、高度2.668個單位的圓筒狀龍骨了。
#将0到2π分成942份
theta = np.linspace(0, 2*np.pi, cols)
x = r*np.cos(theta)
y = r*np.sin(theta)
#将0到h=2.66分成400份
z = np.linspace(0, h, rows)
xs = np.tile(x, (rows,1))
ys = np.tile(y, (rows,1))
zs = z.repeat(cols).reshape((rows,cols))
xs1 = np.tile(x, (rows,1)) 3
xs2 = np.tile(x, (rows,1))-3
ys1 = np.tile(y, (rows,1)) 3
ys2 = np.tile(y, (rows,1))-3
#制作旋轉葉輪
theta = np.linspace(0, 2*np.pi, 18, endpoint=False)
x = r*np.cos(theta)
y = r*np.sin(theta)
x[2::3] = x[1::3]
x[1::3] = 0
y[2::3] = y[1::3]
y[1::3] = 0
z = np.ones(18) * h * 0.9
vs = np.stack((x,y,z), axis=1)
vs1 = np.stack((x 3,y,z), axis=1)
vs2 = np.stack((x-3,y,z), axis=1)
vs3 = np.stack((x,y 3,z), axis=1)
vs4 = np.stack((x,y-3,z), axis=1)
#每隔10個點抽取1個點,用mesh的方法畫出龍骨形狀
plt.mesh(xs, ys, zs, im[::-1])
plt.mesh(xs1, ys, zs, im[::-1])
plt.mesh(xs2, ys, zs, im[::-1])
plt.mesh(xs, ys1, zs, im[::-1])
plt.mesh(xs, ys2, zs, im[::-1])
#旋轉葉輪畫成紅色
plt.surface(vs, color='#C03000', method='T', mode='FCBL', alpha=0.8)
plt.surface(vs1, color='#C03000', method='T', mode='FCBL', alpha=0.8)
plt.surface(vs2, color='#C03000', method='T', mode='FCBL', alpha=0.8)
plt.surface(vs3, color='#C03000', method='T', mode='FCBL', alpha=0.8)
plt.surface(vs4, color='#C03000', method='T', mode='FCBL', alpha=0.8)
#白色照明燈
plt.sphere((0,0,h*0.4), 0.4, '#FFFFFF', slices=60, mode='FCBC')
plt.sphere((3,0,h*0.4), 0.4, '#FFFFFF', slices=60, mode='FCBC')
plt.sphere((-3,0,h*0.4), 0.4, '#FFFFFF', slices=60, mode='FCBC')
plt.sphere((0,3,h*0.4), 0.4, '#FFFFFF', slices=60, mode='FCBC')
plt.sphere((0,-3,h*0.4), 0.4, '#FFFFFF', slices=60, mode='FCBC')
#紅線燈籠線
plt.plot((0,0), (0,0), (0.4*h, 1.5*h), width=3.0, style='solid', cmap='hsv', caxis='z')
plt.plot((3,3), (0,0), (0.4*h, 1.5*h), width=3.0, style='solid', cmap='hsv', caxis='z')
plt.plot((-3,-3), (0,0), (0.4*h, 1.5*h), width=3.0, style='solid', cmap='hsv', caxis='z')
plt.plot((0,0), (3,3), (0.4*h, 1.5*h), width=3.0, style='solid', cmap='hsv', caxis='z')
plt.plot((0,0), (-3,-3), (0.4*h, 1.5*h), width=3.0, style='solid', cmap='hsv', caxis='z')
print(plt.title.__doc__)
#紅色标題
plt.title(text='元宵節快樂!', size=64, color='red', pos=(0,0,0),align='center',weight='bold')
plt.show(rotation='h-')
4、效果
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!