用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中的文本处理
Apr 11 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
Python进程间通信Queue实例解析
Jan 25 Python
Python检测网络延迟的代码
May 15 Python
Python中GIL的使用详解
Oct 03 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
Python 操作 ElasticSearch的完整代码
Aug 04 Python
python字符串下标与切片及使用方法
Feb 13 Python
如何基于python实现年会抽奖工具
Oct 20 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 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获取网络上文件
2006/10/09 PHP
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
跟老齐学Python之??碌某?? target=
2014/09/12 Python
Python日志模块logging简介
2015/04/13 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
Python 音频生成器的实现示例
2019/12/24 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
python打包多类型文件的操作方法
2020/09/21 Python
智能钱包:Ekster
2019/11/21 全球购物
为什么会有内存对齐
2016/10/10 面试题
linux面试题参考答案(9)
2015/01/07 面试题
中学教师岗位职责
2013/11/26 职场文书
职业规划书如何设计?
2014/01/09 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
群众路线领导对照材料
2014/08/23 职场文书
金融保险专业求职信
2014/09/03 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
门卫管理制度范本
2015/08/05 职场文书
职工培训工作总结
2015/08/10 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书