我对于图案,图形有关的算法一直有很大兴趣,前几天读到 @梦符佳月 的深度文章(https://zhuanlan.zhihu.com/p/66806074),看到评论区 @不忌惮 提的一个有趣问题,不禁想展开来写一下。
问题大概是这种上疏下密的立面怎么生成,有何算法依据。
一个小先决条件,这里使用了 numpy。并且是用 Jupyter Notebook 来做的 Prototype,并不能直接放进 Rhino 里。但是这个思路应该是行的通的。
首先想到用何种数据结构表达这个立面,马上想到二维数组(2D array)。先假设立面全部都铺满:
import numpy as np
class Facade:
def __init__(self, width, height):
self.width = width
self.height = height
self.facade = np.asarray([["O" for j in range(self.width)] for i in range(self.height)])
其中 self.facade 就是我们的开窗,用 “O” 来表示。看起来像这样: