用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 相关文章推荐
tensorflow实现简单的卷积网络
May 24 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
python实现简单多人聊天室
Dec 11 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
Python内置数据类型list各方法的性能测试过程解析
Jan 07 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
Django ORM filter() 的运用详解
May 14 Python
关于matplotlib-legend 位置属性 loc 使用说明
May 16 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 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
各种战术和打法的原创者
2020/03/04 星际争霸
咖啡知识大全
2021/03/03 新手入门
php读取html并截取字符串的简单代码
2009/11/30 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
python各种语言间时间的转化实现代码
2016/03/23 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
用Python开发app后端有优势吗
2020/06/29 Python
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
关于迟到的检讨书
2014/01/26 职场文书
高三自我评价
2014/02/01 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
C++程序员求职信
2014/05/07 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
二审答辩状范文
2015/05/22 职场文书
教师节座谈会主持词
2015/07/03 职场文书
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏
Nginx 常用配置
2022/05/15 Servers