用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 相关文章推荐
wxPython学习之主框架实例
Sep 28 Python
全面理解Python中self的用法
Jun 04 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
python实现报表自动化详解
Nov 16 Python
tensorflow实现加载mnist数据集
Sep 08 Python
python实现列表的排序方法分享
Jul 01 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
python 日期排序的实例代码
Jul 11 Python
从numpy数组中取出满足条件的元素示例
Nov 26 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
Python  word实现读取及导出代码解析
Jul 09 Python
Python的collections模块真的很好用
Mar 01 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
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
分析python请求数据
2018/08/19 Python
python标记语句块使用方法总结
2019/08/05 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
如何通过python计算圆周率PI
2020/11/11 Python
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
派出所所长先进事迹
2014/05/19 职场文书
商业项目策划方案
2014/06/05 职场文书
先进党组织事迹材料
2014/12/26 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
Python中异常处理用法
2021/11/27 Python
排查Tomcat进程假死的问题
2022/05/06 Servers