Python制作旋转花灯祝大家元宵节快乐(实例代码)

作者:Python可乐的呀 时间:2023-10-24 02:49:18 

1、原材料

1.1 花灯纸

如下所示,还可以加上自己喜欢的图案、文字等。

Python制作旋转花灯祝大家元宵节快乐(实例代码)

2.2 Python环境和模块

一台安装了Python环境的电脑,Python环境需要安装以下模块。

numpy
pillow
wxgl

如果没有上述模块,请参考下面的命令安装。

pip install numpy
pip install pillow
pip install wxgl

2、源代码

#元宵节就要到了,花灯要不要来一盏?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[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-')

3、效果

Python制作旋转花灯祝大家元宵节快乐(实例代码)

来源:https://www.cnblogs.com/sn5200/archive/2022/02/15/15896015.html

标签:Python,元宵节,花灯
0
投稿

猜你喜欢

  • Python自动扫描出微信不是好友名单的方法

    2023-03-14 09:25:44
  • python执行CMD指令,并获取返回的方法

    2021-10-19 02:52:40
  • MDF文件在SQL Server中的恢复技术

    2024-01-18 16:25:48
  • mysql insert语句操作实例讲解

    2024-01-15 12:12:24
  • golang 实现时间滑动窗口的示例代码

    2024-02-13 18:22:18
  • Pytorch加载数据集的方式总结及补充

    2023-02-15 17:14:37
  • Python实现的ini文件操作类分享

    2022-01-01 12:46:24
  • Python利用requests模块下载图片实例代码

    2023-11-18 16:10:13
  • Python中super关键字用法实例分析

    2023-12-08 06:11:46
  • MySQL 学习总结 之 初步了解 InnoDB 存储引擎的架构设计

    2024-01-26 10:15:38
  • 详解Js模板引擎(TrimPath)

    2024-04-10 13:55:36
  • Go语言运行环境安装详细教程

    2024-05-29 22:07:51
  • linux mysql5.5升级至mysql5.7的步骤与踩到的坑

    2024-01-21 17:09:08
  • MySQL Innodb表导致死锁日志情况分析与归纳

    2024-01-27 04:04:42
  • 服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(下)

    2008-11-11 12:59:00
  • Go语法糖之‘...’ 的使用实例详解

    2024-04-26 17:16:43
  • SQL学习笔记二 创建表、插入数据的语句

    2011-09-30 11:17:32
  • mysql 5.7.16 winx64安装配置方法图文教程

    2024-01-26 22:30:25
  • 5招优化MySQL插入方法

    2009-04-02 10:49:00
  • php静态化页面 htaccess写法详解(htaccess怎么写?)

    2023-11-14 22:33:03
  • asp之家 网络编程 m.aspxhome.com