用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 11 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 Python
对Python+opencv将图片生成视频的实例详解
Jan 08 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
Django继承自带user表并重写的例子
Nov 18 Python
python中seaborn包常用图形使用详解
Nov 25 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
python Protobuf定义消息类型知识点讲解
Mar 02 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分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
索趣科技的答案
2007/02/07 Javascript
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
Python生成器(Generator)详解
2015/04/13 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
在Python中定义一个常量的方法
2018/11/10 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
分析经典Python开发工程师面试题
2019/04/08 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
计算机操作自荐信
2013/12/07 职场文书
《猫》教学反思
2014/02/26 职场文书
《识字五》教学反思
2014/03/01 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
实习生工作证明范本
2014/09/14 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
医院护士工作检讨书
2014/10/26 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
地雷战观后感
2015/06/09 职场文书
红歌会主持词
2015/07/02 职场文书
MySQL数据库之存储过程 procedure
2022/06/16 MySQL