元宵节就要到了,手把手教你用Python打造一款D花灯.docxVIP

元宵节就要到了,手把手教你用Python打造一款D花灯.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
元宵节就要到了,手把手教你用Python打造一款3D花灯 如下所示,还可以加上本人宠爱的图案、文字等。 2.2 Python环境和模块 一台安装了Python环境的电脑,Python环境需要安装以下模块。 numpy pillow wxgl 假如没有上述模块,请参考下面的命令安装。 pip?install?numpy pip?install?pillow pip?install?wxgl NumPy和pillow是Python旗下最常用的科学计算库和图像处理库,属于常用模块。WxGL是一个基于PyOpenGL的三维数据可视化库,以wx为显示后端,供应Matplotlib风格的交互式应用模式,同时,也可以和wxPython无缝结合,在wx的窗体上绘制三维模型。关于WxGL的更多信息,请参阅我的另一篇博客《格外钟玩转3D绘图:WxGL完全手册》。 3 制造工序 花灯制造工序格外简约,只需要三十行代码,可以直接在Python IDLE中以交互方式逐行执行。 3.1 导入模块 ?import?numpy?as?np ?from?PIL?import?Image ?import?wxgl.wxplot?as?plt 3.2 打开花灯纸图像 ?fn?=?rD:\temp\light0115\res\paper.png ?im?=?np.array(Image.open(fn))/255 ?im.shape (400,?942,?3) fn定义的是图像存储路径,请据实修改。Image.open(fn)打开文件,前往一个PIL对象,np.array()将PIL对象转成numpy.ndarray数组对象。除以255,将图像数据从0到255的值域范围变成0到1,顺应WxGL的接口要求。查看数组的shape,显示图像辨别率为400像素高、942像素宽,每个像素有三种颜色(此处为RGB)。 3.3 依据花灯纸的大小制造龙骨 纸长942像素,卷成圆筒,半径就是149.9像素,假如把半径视为1个单位,则高度400像素相当于2.668个单位。 ?rows,?cols,?deep?=?im.shape ?cols/(2*np.pi) 149.9239563925654 ?r?=?1 ?h?=?2*np.pi*rows/cols ?h 2.6680192387174464 接下来需要制造半径1个单位、高度2.668个单位的圆筒状龙骨了。 ?theta?=?np.linspace(0,?2*np.pi,?cols) ?x?=?r?*?np.cos(theta) ?y?=?r?*?np.sin(theta) ?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)) 这里的xs、ys、zs就是圆筒状龙骨上各个点的x坐标、y坐标、z坐标。下面的代码,每隔10个点抽取1个点,用mesh的方法画出龙骨外形。当然,也可以画出全部的点,那样顶点就会连成一片。 ?plt.mesh(xs[::10,::10],?ys[::10,::10],?zs[::10,::10],?mode=FLBL) ?plt.show() 用3D的方式画出来的龙骨,效果如下。 3.4 给龙骨贴上花灯纸 有了龙骨,接下来就可以把花灯纸贴在龙骨上了。连续操作之前,记得先把刚才弹出的3D龙骨窗口关闭。 ?plt.mesh(xs,?ys,?zs,?im) ?plt.show() 不过,你会马上发觉,花灯纸上下方向贴反了。没关系,我们可以像下面这样反转方向。 ?plt.mesh(xs,?ys,?zs,?im[::-1]) ?plt.show() 怎样样,是不是有一点走马灯的雏形了呢? 3.5 制造旋转叶轮 走马灯之所以能够转动,是由于里面有蜡烛加热构成上升气流,推动顶部的叶轮旋转,从而带动花灯旋转。当然,这里的叶轮仅仅是个样子,花灯旋转依靠另外的机制实现。 ?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) ?plt.mesh(xs,?ys,?zs,?im[::-1]) ?plt.surface(vs,?color=#C03000,?met

文档评论(0)

bob157641554 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档