前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python画一幅美瞳,今日份来自程序员的浪漫

用python画一幅美瞳,今日份来自程序员的浪漫

作者头像
测试小兵
发布2019-09-29 16:25:32
5790
发布2019-09-29 16:25:32
举报
文章被收录于专栏:猪圈子猪圈子猪圈子

如果说,眼睛是心灵的窗户,那么,美瞳就是心灵的彩窗,就像下图中这样。

而我们今天所要挑战的,就是用python画美瞳,而且是五分钟之内画三百副争奇斗艳、各领风骚、绝不重样的美瞳。作为这颗地球上最纯情的少年,我一直抱守着最质朴的信念——美丽,绝不NG!

江湖上一直都有传言,python除了生孩子不会,别的都会!那么,python作为理工男的玩具,程序员的武器,要攻下美瞳这块属于女孩子们的领地,虽然免不了会是一场旷日持久、拉拉扯扯的恶战,也必定会决胜千里、赢得帅气!

最终得到的部分结果,可以先看下图体会一下:

那么,接下来,牛皮吹完了,差不多可以收收心,开始准备干活了。

首先,我们可以看到,美瞳的大致形状是椭圆,从椭圆的中心到外围,颜色是在缓慢地渐变,自然地过渡,这样才会显得比较有纵深感。而这也就决定了,在三维空间中,用渲染椭球的方式来实现这样的视觉效果,是更为可行的。

那么,我们可以绘制椭球了,使用numpy库,用100个经度值、100个纬度值就可以获得10000个位于椭球面上的点,连接起来就是一个闭合的椭球面,绘制过程是通过matplotlib库实现的。代码实现如下:

u=np.linspace(0,2*pi,100)
  v=np.linspace(0,pi,100)     
  x=a*np.outer(np.cos(u),np.sin(v))
  y=a*np.outer(np.sin(u),np.sin(v))
  z=b*np.outer(np.ones(np.size(u)),np.cos(v))
  #cmap指的是配色方案,默认为纯蓝色,可通过matplotlib.cm.cmap_d.keys()获取所有配色方案,alpha指的是透明度
  ax.plot_surface(x,y,z,cmap=value,alpha=0.7)

先看一下,效果是这样:

这样看的话,和美瞳的形状是相去甚远的,这是因为我们是从倾斜的角度去看这个椭球的。如果我们从正上方或者正下方看的话,就会发现形象接近了一些。而这只需要加一行代码就可以。

#将视点的位置偏转90度
 ax.view_init(90,0)

看着确实还是挺美的,但是还是略显了一点单调和空洞,还是缺少了一些层次感。而要有层次感,光有渐变是不够的,还要有停顿!

为了实现这一效果,我们可以在椭球的Z轴上画一个圆锥。无论是通过圆锥看椭球,还是通过椭球看圆锥,都会发现双方的框架已经合二为一,相爱相杀,眉头解不开的结,命中解不开的解,是你,是你,梦见的就是你!

圆锥曲线的绘制并不算难,均匀地绘制100条直线,每条直线和赤道面的夹角保持相同,代码如下:

for i in np.linspace(0,2*pi,100):        
  x_yuanzhui=15000000*cos(radians(60))*sin(i)        
  y_yuanzhui=15000000*cos(radians(60))*cos(i)        
  z_yuanzhui=10000000-15000000*sin(radians(60))
  #linestyle中可以设定线形为破折号        
  plt.plot([0, x_yuanzhui], [0, y_yuanzhui], [10000000, z_yuanzhui], color='black', linestyle='--')

用ax.view_init(90,0)和ax.view_init(270,0)分别指定视点方向为正北极和正南极,那么,一颗椭球就可以得到两副美瞳。还可以将获得的美瞳保存为PNG图片,用这句代码就可以:

plt.savefig(filename)

在文件夹中看就是酱紫的:

美瞳是心灵的彩窗,而窗户总要开开合合,如果颜色还能变化,那就更能体现出生活的缤纷多彩。我们可以通过imageio的生成gif来实现。代码如下:

for filename in filenames:
        images.append(imageio.imread(filePath+"\\image\\"+filename))
imageio.mimsave(filePath+'\\result.gif',images,duration=0.2)

最终的效果就是这样:

脚本:python爱好者社区

图片:python爱好者社区

来源:python爱好者社区


/ END.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python测试社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档