用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根据文件大小打log日志
Oct 09 Python
Python中使用摄像头实现简单的延时摄影技术
Mar 27 Python
python实现字符串和日期相互转换的方法
May 13 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
pip指定python位置安装软件包的方法
Jul 12 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
Python超简单容易上手的画图工具库推荐
May 10 Python
PyTorch dropout设置训练和测试模式的实现
May 27 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
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
JavaScript运算符小结
2015/06/03 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
三星美国官网:Samsung美国
2017/02/06 全球购物
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
高二地理教学反思
2014/01/24 职场文书
党员干部承诺书范文
2014/03/25 职场文书
《生命 生命》教学反思
2014/04/19 职场文书
员工薪酬激励方案
2014/06/13 职场文书
基层工作经历证明
2015/06/19 职场文书
图书馆义工感想
2015/08/07 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
浅谈Node的内存泄露问题
2022/05/06 NodeJs