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

目录
  • 1、原材料
    • 1.1 花灯纸
    • 2.2 Python环境和模块
  • 2、源代码
  • 3、效果

1、原材料

1.1 花灯纸

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

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制作旋转花灯祝大家元宵节快乐的文章就介绍到这了,更多相关Python旋转花灯内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python+OpenGL制作一个元宵花灯

    目录 1.准备 2.快速体验 3.模型动画 4.子图布局 5.颜色映射 6.走马灯 又是一年元宵节,作为程序员的你,打算怎么过呢?如果昨天情人节的红包发得手软又心疼,不妨静下心来,了解一下三维数据可视化,顺便做一盏花灯送给女朋友,也许比红包更能讨她欢心呢. 1.准备 三维数据快速可视化工具,我喜欢用WxGL.这是一个基于PyOpenGL的三维数据可视化库,提供类似Matplotlib风格的3D绘图函数.如果熟悉NumPy和Matplotlib的话,只需要几分钟时间就可以学会使用WxGL的交互式绘

  • 使用Python制作一盏 3D 花灯喜迎元宵佳节

    说起元宵节,各位有没有觉得这是咱们中国人最浪漫的节日呢?国人向来拘谨古板,一年到头都是小心谨慎地过日子,唯有元宵节这天可以纵情豪放一把.东风夜放花千树,宝马雕车香满路,火树银花霓虹闪烁,豪车遍地美女如云.细品,你甚至都能嗅到香奈儿的味道!月上柳梢头,人约黄昏后,这又是何等的浪漫!比起烛光晚宴.鲜花加持,这份浪漫更显纯真.晚至明清,民间元宵节的喜庆气氛,堪比西班牙的奔牛节.巴西的狂欢节.泰国的泼水节. 由于众所周知的原因,估计今年的趵突泉元宵节灯会又要黄了.去哪儿体验"花市灯如昼"的节日

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

    目录 1.原材料 1.1 花灯纸 2.2 Python环境和模块 2.源代码 3.效果 1.原材料 1.1 花灯纸 如下所示,还可以加上自己喜欢的图案.文字等. 2.2 Python环境和模块 一台安装了Python环境的电脑,Python环境需要安装以下模块. numpy pillow wxgl 如果没有上述模块,请参考下面的命令安装. pip install numpy pip install pillow pip install wxgl 2.源代码 #元宵节就要到了,花灯要不要来一盏?3

  • python获取当前运行函数名称的方法实例代码

    python获取当前运行函数名称的方法实例代码 摘要: c/c++中获取函数所在源码名,函数名和行号的方法很简单 __FILE__,__FUNCTION__和__LINE__ python没有这种语法,但也可以通过某种方法得到,这里给出例子,使用异常信息得到[可能会损失性能] 直接贴代码[可参考python核心编程4.4] #获取调用该函数所在(被调用)的函数名 #author:peterguo@vip.qq.com def get_func_name(): import sys try: ra

  • PHP制作登录异常ip检测功能的实例代码

    使用函数查询数据库遍历实现 /** * 不在常用ip地址登录返回描红信息 * @param string $ip ip地址 * @param string $name 用户名 * @return string */ function errorIp($ip,$name){ $nowip = get_client_ip(); //判断ip和当前ip是否相同,不同则查询数据库对比 if($ip == $nowip ){ //相同直接返回字符串 $str = '<font color="blue

  • python导出chrome书签到markdown文件的实例代码

    python导出chrome书签到markdown文件,主要就是解析chrome的bookmarks文件,然后拼接成markdown格式的字符串,最后输出到文件即可.以下直接上代码,也可以在 py-chrome-bookmarks-markdown 中直接参见源码. from json import loads import argparse from platform import system from re import match from os import environ from

  • python编程实现随机生成多个椭圆实例代码

    椭圆演示: 代码示例: import matplotlib.pyplot as plt import numpy as np from matplotlib.patches import Ellipse NUM = 250 ells = [Ellipse(xy=np.random.rand(2) * 10, width=np.random.rand(), height=np.random.rand(), angle=np.random.rand() * 360) for i in range(N

  • python编程使用selenium模拟登陆淘宝实例代码

    selenium简介 selenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选selenium ,相因为它相比QTP有诸多有点: * 免费,也不用再为破解QTP而大伤脑筋 * 小巧,对于不同的语言它只是一个包而已,而QTP需要下载安装1个多G 的程序. * 这也是最重要的一点,不管你以前更熟悉C. java.ruby.python.或都是C# ,你都可以通过selenium完成自动化测试,而QTP只支持VBS * 支持多平台:windows.linux.MAC ,支持多浏

  • python之matplotlib学习绘制动态更新图实例代码

    简介 通过定时器Timer触发事件,定时更新绘图,可以形成动态更新图片.下面的实例是学习<matplotlib for python developers>一文的笔记. 实现 实现代码及简单介绍 通过self.user = self.user[1:] + [temp],每次删除列表的第一元素,在其尾部添加新的元素.这样完成user数据的动态更新.其他详细的解释见文中的注释部分. #-*-coding:utf-8-*- import wx from matplotlib.figure impor

  • python编程测试电脑开启最大线程数实例代码

    本文实例代码主要实现python编程测试电脑开启最大线程数,具体实现代码如下. #!/usr/bin/env python #coding=gbk import threading import time, random, sys class Counter: def __init__(self): self.lock = threading.Lock() self.value = 0 def increment(self): self.lock.acquire() self.value = v

  • Python实现微信消息防撤回功能的实例代码

    微信(WeChat)是腾讯公司于2011年1月21日推出的一款社交软件,8年时间微信做到日活10亿,日消息量450亿.在此期间微信也推出了不少的功能如:"摇一摇"."漂流瓶"."朋友圈"."附近的人"."公众平台"."小程序"等等,涵盖了我们生活的方方面面,微信正在慢慢践行着他们的口号:微信,是一个生活方式 一.背景介绍 产品的更新迭代必然会伴随着功能的推出和下线,今天我们要讲的便是微信

  • python sklearn库实现简单逻辑回归的实例代码

    Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Reduction).分类(Classfication).聚类(Clustering)等方法.当我们面临机器学习问题时,便可根据下图来选择相应的方法. Sklearn具有以下特点: 简单高效的数据挖掘和数据分析工具 让每个人能够在复杂环境中重复使用 建立NumPy.Scipy.MatPlotLib之上 代

随机推荐