用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基础教程之Filter使用方法
Jan 17 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
pycharm new project变成灰色的解决方法
Jun 27 Python
python解析yaml文件过程详解
Aug 30 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Pytorch转onnx、torchscript方式
May 25 Python
用Python进行栅格数据的分区统计和批量提取
May 27 Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 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
解决中英文字符串长度问题函数
2007/01/16 PHP
PHP Undefined index报错的修复方法
2011/07/17 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
关于跨站脚本攻击问题
2011/12/22 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
python获取指定网页上所有超链接的方法
2015/04/04 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
基于python实现计算两组数据P值
2020/07/10 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
医学院学生的自我评价分享
2013/11/19 职场文书
人力资源主管职责范本
2014/03/05 职场文书
事业单位鉴定材料
2014/05/25 职场文书
施工安全责任书范本
2014/07/24 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
KTV员工管理制度
2015/08/06 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
详解Python flask的前后端交互
2022/03/31 Python
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js