码迷,mamicode.com
首页 > 编程语言 > 详细

Python + Matplotlib 绘制 Penrose 铺砌

时间:2015-06-12 19:15:24      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

效果是不是很漂亮呢?

 

技术分享

 

代码如下:

  

#-----------------------------------------

#  Python + Matplotlib 绘制 Penrose 铺砌

#  by Zhao Liang   zhao_liang@pku.edu.cn

#-----------------------------------------


import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path
from matplotlib.patches import PathPatch


plt.figure(figsize=(8,6),dpi=100)
plt.subplot(aspect=1)
plt.axis([-0.6,0.6,-0.6,0.6])
plt.xticks([])
plt.yticks([])
plt.axis(‘off‘)

a = 0.5*(np.sqrt(5)-1)

‘‘‘
所有要绘制的三角形都放在一个列表中,列表的每个元素形如
[color, A, B ,C],其中 color = 0, 1 表示两种颜色之一,
A, B, C 是 np.array 数组表示三角形三个顶点的坐标.
每次把切割后的小三角形放在一个新的列表 result 里面然后
返回 result.
‘‘‘

def subdivide(triangles):
    result = []
    for color,A,B,C in triangles:
        if color == 0:
           P = A + (B-A)*a
           result += [(0,C,P,B),(1,P,C,A)]
        else:
           Q = B+(A-B)*a
           R = B+(C-B)*a
           result +=[(1,R,C,A),(1,Q,R,B),(0,R,Q,A)]
    return result

‘‘‘
画图没有什么好说的,注意三角形 ABC 的底边 BC 是永远不画的,它们是
合并为菱形时的边界.
‘‘‘

def DrawFigure(triangles):
    for color,A,B,C in triangles:
        vertices = [C,A,B]
        codes = [Path.MOVETO]+[Path.LINETO]*2
        tri = Path(vertices,codes)
        if color == 0:
            tri_patch=PathPatch(tri,facecolor=‘#FF0099‘,edgecolor=‘#666666‘,linewidth=0.8)
        else:
            tri_patch=PathPatch(tri,facecolor=‘#66CCFF‘,edgecolor=‘#666666‘,linewidth=0.8)
        plt.gca().add_patch(tri_patch)
    plt.show()


triangles = []
A=np.array([0,0])

for i in range(10):
    B = np.array([np.cos(0.2*np.pi*i),np.sin(0.2*np.pi*i)])
    C = np.array([np.cos(0.2*np.pi*(i+1)),np.sin(0.2*np.pi*(i+1))])
    if i%2 == 0:
        B , C = C, B
    triangles.append([0,A,B,C])

m = input(‘Enter number of divisions: ‘)
for j in xrange(m):
    triangles=subdivide(triangles)

DrawFigure(triangles)

  

 

Python + Matplotlib 绘制 Penrose 铺砌

标签:

原文地址:http://www.cnblogs.com/xida/p/4572341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!