用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中对列表排序实例
Jan 04 Python
python获取一组数据里最大值max函数用法实例
May 26 Python
python+ffmpeg视频并发直播压力测试
Mar 06 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
Python 元组拆包示例(Tuple Unpacking)
Dec 24 Python
django配置app中的静态文件步骤
Mar 27 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
使用gunicorn部署django项目的问题
Dec 30 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
php中文本操作的类
2007/03/17 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
php绘制一条弧线的方法
2015/01/24 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
个人实用的自我评价范文
2013/11/23 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
园艺师求职信
2014/04/27 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
小学班级口号大全
2015/12/25 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
Python源码解析之List
2021/05/21 Python