Bottomless wonders spring from simple rules,
which are repeated without end.
大自然不断地在重复简单的单元,最终变成各种复杂的结构。只要细心观察,我们经常能够发现很多循环迭代的例子,例如树的枝干、河的支流、蜿蜒的海岸线、血液循环的管道系统,世界本质上是非线性的,而分形是复杂非线性特征的一种几何表现,用分形语言去描绘大自然丰富多彩的面貌是最适宜的。
迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值计算出对应的一个新值。Anemone就是继hoopsnake之后基于迭代算法的一款插件。用于快速选择的非递归实现算法——循环迭代算法,与递归算法以及VC++标准库函数nth_element进行了比较,表明该算法比传统的递归算法具有较高的效率和可靠性;与标准库函数nth_ element比较,在时间效率方面具有明显优势。循环机制中比较常见的一个例子是Lloyd算法,也称为Voronoi迭代,是一种以斯图亚特·劳埃德命名的算法,用于在欧几里德空间的子集中发现均匀间隔的点集,并将这些子集的分区分解成形状匀、大小均匀的凸形细胞。下图为Lloyd算法的例子,显示每个迭代当前点的Voronoi图,加号表示Voronoi细胞的中心。从图中可以很容易的发现,随着迭代次数的增加,这些点非常接近Voronoi细胞的中心。Lloyd算法反复在分区中查找每个集的中心,然后根据这些中心组生成Voronoi 图形。类似的算法也可应用于高维空间,例如在有限元素法中平滑三角网格,或者进行网格均匀化。由于 Voronoi细胞具有凸形,并且始终环绕其站点,因此存在简单的分解,可简单划分为:
在两个维度中,多边形单元格的边缘与其位点相连,形成一组伞形的三角形。
在三个维度中,单元体由几个平面多边形包围,需要进行三角测量。
对于具有n个三角形累积区域的2D单元AC=∑i=0nai(在这里ai是一个三角形的面积),新的细胞中心计算如下:类似地,对于具有体积的3D单元vC=∑i=0nvi(在这里vi是一个特拉德龙的体积),中心计算如下:
Lloyd算法可用于生成点图的造型,在此应用程序中,中心集可以基于参考图像进行加权,以生成与输入图像相匹配的插图。在有限元数法中,具有复杂几何形状通常被划分为形状更简单的元素:例如,二维域(欧几里德平面的子集或三维表面)通常被分割成三角形。这些元素的形成对于有限元素方法的融合非常重要。Lloyd算法可应用于优化网格,移动其顶点并更改元素之间的连接模式,以产生更紧密的等边三角形。这些应用程序通过Lloyd 算法的较小次数迭代,阻止其收敛,以保留网格的其他功能。与不同的平滑方法(Laplacian 平滑)相比,Lloyd 的算法可以改变网格的拓扑,导致更近等边元素,并避免出现Laplacian平滑导致的缠绕问题。虽然循环迭代的算法比较复杂,但是Anemone的作者对算法进行了简化,用户使用起来非常简单和方便。Anemone可以选择性的记录循环结果,还可以选择多个循环参数。常用的就是Loop Start和Loop end 两个运算器,需要注意的是start和end端的输入参数数量必须相同,不然就会报错。Loop Start运算器的N端输入循环次数,T端为循环启动的触发器,双击start运算器图标重启循环,双击end电池的图标结束循环。
Loop end运算器的E端为循环结束条件,D端输入需要循环的数据右键end电池的图标,选择Record data就会记录下每一次循环的数据。
科克曲线(Koch curve)是一种典型的分形曲线,一个边长为1的等边三角形,取每边中间的三分之一,接上去一个形状完全相似的但边长为其三分之一的三角形,结果是一个六角形。取六角形的每个边做同样的变换,即在中间三分之一接上更小的三角形,以此重复,直至无穷。外界的变得原来越细微曲折,形状接近理想化的雪花。
2. 延申动画
分形几何的理论是直观可见的,它所涉及的形态具有巨大的审美感染力和各种各样的用途。Anemone插件可以模拟动态生长的过程,就是利用每次循环增加曲线参数值(与timer类似),再用record data 记录历史数据,就有延申动画的效果。
3. 树枝生长
自然界多姿多彩的植物深深地吸引着数学家和计算科学家,他们通过分形理论提供的数学规则对自然界的花、草、树、叶等植物的造型和生长进行计算机模拟。
当分形出现在植物中时,它们的每一分支和嫩芽都与其整体非常相似,其生成规则保证了小尺度上的特征成长后就变成大尺度上的特征,可以使植物最大限度地暴露在阳光下。以下为通过Anemone插件模拟树枝生长的过程:
① 生成基本圆接入循环中
② 将counter与一个数相乘得到圆每次偏移的距离
③ 接着将偏移后的圆向下移动,生成递增的随机点
④ 用closest point找到偏移后的随机点与偏移前的圆上的最近点
⑤ 将前后生成的对应点生成线
分形几何远远不只是一枝数学奇葩,它们还为描述物体和组织的结构形态、为探索物质世界的复杂机制提供了极其简洁的工具。将树枝生长分形案例进行延申,用细分工具的多管工具生成圆管就可以得到另一种效果——泰森多边形生长球。
分形是从混沌方程形成的一系列图形,包含不断放大的复杂自相似图案。分形的数学之美在于可以从相对简单的方程推导出无限复杂的系统。通过多次迭代或重复分形生成方程,随机输出就可以产生独特且可识别的美丽图案。
www.rhino-grasshopper.com