在第一篇文章(
有限集分形的可视化 - 从Circle Inversion说起)中,我给大家介绍了CI (Circle Inversion)的一些基本情况,包括一个基于IFS迭代的生成方法。对于C
1到C
n这n个CI,我们把他们看成一组迭代函数,从而可以从一般情况下通过IFS得到其吸引子:L(C
1, C
2, ..., C
n),这是一个极限集。
但是采用IFS的方法得到的是一个混沌的结构,我们很难进行一些有意思的展现。Mandelbrot提出了一种快速找到极限集的方法,不过只能针对某些情况才适用,其中一个典型的例子便是
Apollonian Gasket。下面我们针对一个简单的例子来讲述Mandelbrot的方法:
这里,有五个CI,分别是C1 ~ C5这五个Circle给出的。他们成tangent关系,也就是相交的两个圆只有一个交点,交点处的切线重合(但方向不同)。
Mandelbrot方法的第一步是要找出包含所有极限点的圆,这里可以很容易的得出是S1,它和C1、C2、C3、C4正交。实际上,L(C1, C2, C3, C4) = S1。类似的,L(C1, C2, C5) = S2, L(C2, C3, C5) = S3, L(C3, C4, C5) = S4, L(C4, C1, C5) = S5。这样可以得出,L(C1, C2, C3, C4, C5)包含S1、S2、S3、S4、S5。实际上,整个极限集都包含在S1内,而在S2、S3、S4之外。这就完成了第一步,实际上我们已经完成了两步:找到bounded circle以及第一批不包含任何极限点的圆。
这是填充了颜色后的结构,其中白色的大圆就是S1,而蓝色的四个小圆就是S2、S3、S4。剩下的几个红色的圆是由四个蓝色的小圆Inverse得到的,他们也不包含任何极限点。接下来是迭代,也就是重复这个动作。对红色的小圆进行Inverse得到更多的不好含任何极限点的圆,一直这样排除下去。
而最终的极限集是这样的: