用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求pi的方法
Oct 08 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
Python网站验证码识别
Jan 25 Python
玩转python爬虫之正则表达式
Feb 17 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
May 24 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
python实现ID3决策树算法
Aug 29 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
python创建与遍历List二维列表的方法
Aug 16 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
python识别围棋定位棋盘位置
Jul 26 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
关于js和php对url编码的处理方法
2014/03/04 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
PHP实现文件上传与下载
2020/08/28 PHP
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
React diff算法的实现示例
2018/04/20 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
Python循环语句中else的用法总结
2016/09/11 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
如何在Django项目中引入静态文件
2019/07/26 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
HTTP状态码详解
2021/03/18 杂记
纠纷协议书
2014/04/16 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
检讨书格式范文
2015/05/07 职场文书
排球赛新闻稿
2015/07/17 职场文书
大学生党课感想
2015/08/11 职场文书
PyTorch中的torch.cat简单介绍
2022/03/17 Python