用Python代码来绘制彭罗斯点阵的教程


Posted in Python onApril 03, 2015

这里是显示彭罗斯点阵的Python的脚本。是的,这是可以运行的有效Phython代码。

译注:彭罗斯点阵,物理学术语。上世纪70年代英国数学家彭罗斯第一次提出了这个概念,称为彭罗斯点阵(Pen-rose tiles)。
 

_                 =\
                """if!
               1:"e,V=100
              0,(0j-1)**-.2;
              v,S=.5/ V.real,
             [(0,0,4   *e,4*e*
            V)];w=1     -v"def!
           E(T,A,       B,C):P
         ,Q,R=B*w+        A*v,B*w+C
      *v,A*w+B*v;retur       n[(1,Q,C,A),(1,P
   ,Q,B),(0,Q,P,A)]*T+[(0,C      ,R,B),(1,R,C,A)]*(1-T)"f
or!i!in!_[:11]:S    =sum([E     (*x)for    !x!in!S],[])"imp
 ort!cair        o!as!O;   s=O.Ima        geSurfac
  e(1,e,e)        ;c=O.Con text(s);        M,L,G=c.
   move_to        ,c.line_to,c.s        et_sour
    ce_rgb        a"def!z(f,a)        :f(-a.
    imag,a.    real-e-e)"for!T,A,B,C!in[i    !for!i!
     in!S!if!i[""";exec(reduce(lambda x,i:x.replace(chr
      (i),"\n "[34-i:]),  range(  35),_+"""0]]:z(M,A
       );z(L,B);z     (L,C);     c.close_pa
       th()"G       (.4,.3       ,1);c.
       paint(       );G(.7       ,.7,1)
       ;c.fil       l()"fo       r!i!in
       !range       (9):"!       g=1-i/
       8;d=i/     4*g;G(d,d,d,     1-g*.8
       )"!def   !y(f,a):z(f,a+(1+2j)*(   1j**(i
       /2.))*g)"!for!T,A,B,C!in!S:y(M,C);y(L,A);y(M
       ,A);y(L,B)"!c.st      roke()"s.write_t
       o_png('pen            rose.png')
       """                    ))

当这个程序运行时,它输出了一个1000×1000的图像文件,包含大约2212个由3D立体效应渲染的彭罗斯点阵。这里是该图像的一部分(点击放大)。

用Python代码来绘制彭罗斯点阵的教程

运行该脚本需要Pycairo。它只在Python它是标准的Python脚本,但我努力想把它变得更简洁,于是我又从中删减了一些。

编注:Pycairo是一组Python版本的Cario图形库。

彭罗斯点阵很酷,因为它们非周期性地覆盖了整个平面——图片的转换副本与原型从来不会一致。它们是由Roger Penrose先生通过将五边形的平面平铺在一起的一系列尝试而发明的。

与C或Perl相比,Python并不是让人迷惑的编程语言。这种比较似乎也从未发生,而且在网上也没有多少让人费解的Python的例子:你可以在官方的Python常见问题中或各种网页如这里和这里找到一些例子。在2011年的PyCon对此还有专题讨论。

我相信输出一个高分辨率的图像是第一个让人费解的Python程序。如果你知道其它的例子,可以在评论中告诉我。

Python 相关文章推荐
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
Django组件content-type使用方法详解
Jul 19 Python
python中的global关键字的使用方法
Aug 20 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
详解Python并发编程之创建多线程的几种方法
Aug 23 Python
python之列表推导式的用法
Nov 29 Python
python实现梯度下降法
Mar 24 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 Python
解决python3中os.popen()出错的问题
Nov 19 Python
利用Python演示数型数据结构的教程
Apr 03 #Python
简洁的十分钟Python入门教程
Apr 03 #Python
初步解析Python中的yield函数的用法
Apr 03 #Python
几个提升Python运行效率的方法之间的对比
Apr 03 #Python
对于Python的Django框架使用的一些实用建议
Apr 03 #Python
《Python之禅》中对于Python编程过程中的一些建议
Apr 03 #Python
给Python初学者的一些编程技巧
Apr 03 #Python
You might like
比较完整的微信开发php代码
2016/08/02 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
select组合框option的捕捉实例代码
2008/09/30 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
python学习基础之循环import及import过程
2018/04/22 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
年终自我鉴定
2013/10/09 职场文书
2013年大学生的自我鉴定
2013/10/24 职场文书
体育老师的教学自我评价分享
2013/11/19 职场文书
班班通项目实施方案
2014/02/25 职场文书
高中教师考核方案
2014/05/18 职场文书
党校学习心得体会范文
2014/09/09 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书