分形之康托(Cantor)三分集

      1883年,德国数学家康托(G.Cantor)提出了如今广为人知的三分康托集,或称康托尔集。三分康托集是很容易构造的,然而,它却显示出许多最典型的分形特征。它是从单位区间出发,再由这个区间不断地去掉部分子区间的过程。

      三分康托集的构造过程是:

      第一步,把闭区间[0,1]平均分为三段,去掉中间的 1/3 部分段,则只剩下两个闭区间[0,1/3]和[2/3,1]。

      第二步,再将剩下的两个闭区间各自平均分为三段,同样去掉中间的区间段,这时剩下四段闭区间:[0,1/9],[2/9,1/3],[2/3,7/9]和[8/9,1]。

      第三步,重复删除每个小区间中间的 1/3 段。如此不断的分割下去, 最后剩下的各个小区间段就构成了三分康托集。

      其实三分Cantor集的构造本身就具有严格的自相似的结构,并且具有无穷小的细节,我们可以说三分Cantor集就是分形集。当时,Cantor是为了证明级数中的一些定理引进的,由于它的一些奇异的性质,被当时看作集合中的另类,从而忽视了Cantor集的重要性。如今Cantor集经常在混沌和分形的研究中遇到。既然它是分形,那么它的维数将可以采用前面讲述的方法进行计算。因为它有严格的自相似结构,如果按比例缩小1/3,则它相当于两个原来相似整体。

      Cantor集是一种最简单的分形方式,无非是不停地将一条线段变成两条小点的线段,核心代码如下:

static void FractalCanto(const Vector3& vStart, const Vector3& vEnd, Yreal length, Yreal stepY, Vector3* pVertices)
{
    Vector3 vSub = vEnd - vStart;

    pVertices[0] = vStart;
    pVertices[1] = vStart + vSub*length;
    pVertices[2] = vEnd - vSub*length;
    pVertices[3] = vEnd;

    for (Yuint i = 0; i < 4; i++)
    {
        pVertices[i].y += stepY;
    }
}

程序中可以任意设置实线的分裂比例,而不是严格意义上的三等分:

可以以3D的视角观察图形:

软件下载地址:https://files.cnblogs.com/WhyEngine/Fractal.7z

 

 

 

 

 

posted on 2014-09-28 12:40  叶飞影  阅读(12796)  评论(1编辑  收藏  举报