用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 相关文章推荐
通过数据库向Django模型添加字段的示例
Jul 21 Python
Python虚拟环境项目实例
Nov 20 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
在python3中实现更新界面
Feb 21 Python
python开发前景如何
Jun 11 Python
Python3爬虫mitmproxy的安装步骤
Jul 29 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
next在python中返回迭代器的实例方法
Dec 15 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
python中数组和列表的简单实例
Mar 25 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无限级分类方法及代码
2013/06/21 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
jquery radio 操作代码
2011/03/16 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
Python实现的计算器功能示例
2018/04/26 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
详解Python IO编程
2020/07/24 Python
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
实体的生命周期
2013/08/31 面试题
母亲节演讲稿
2014/05/27 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
店铺转让协议书
2014/12/02 职场文书
西安兵马俑导游词
2015/02/02 职场文书
春节慰问信范文
2015/02/15 职场文书
个人原因辞职信模板
2015/05/13 职场文书
经销商会议开幕词
2016/03/04 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
Python多线程 Queue 模块常见用法
2021/07/04 Python
Python装饰器详细介绍
2022/03/25 Python