加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

曼德布洛特(Mandelbrot)集及其生成代码1(C#)

(2009-11-17 18:43:41)
标签:

分形

mandelbrot

csharp语言

分类: C/C /C#编程

   Mandelbrot研究中最精彩的部分是1980年他发现的并以他的名字命名的集合,他发现整个宇宙以一种出人意料的方式构成自相似的结构(见图1)。         

     Mandelbrot 集合图形的边界处,具有无限复杂和精细的结构。如果计算机的精度是不受限制的话,您可以无限地放大她的边界。图2、图3 就是将图1中两个矩形框区域放大后的图形。当你放大某个区域,它的结构就在变化,展现出新的结构元素。这正如前面提到的"蜿蜒曲折的一段海岸线",无论您怎样放大它的局部,它总是曲折而不光滑,即连续不可微。微积分中抽象出来的光滑曲线在我们的生活中是不存在的。所以说,Mandelbrot集合是向传统几何学的挑战。

曼德布洛特(Mandelbrot)集及其生成代码1(C#)

 

     连续放大Mandelbrot集合局部可以制作精美的GIF动画,放大过程所呈现的无穷玄机和美感引发人们去探索。取其局部进行放大,可以看到它的精细结构及其自相似性质,放大可以无限地进行下去。Mandelbrot集合局部放大过程 精彩地描述了分形的性质,描述了自然界的本质,可以说分形几何是真正描述大自然的几何学。

曼德布洛特(Mandelbrot)集及其生成代码1(C#) 

图 1 Mandelbrot集合

曼德布洛特(Mandelbrot)集及其生成代码1(C#)

图 2 Mandelbrot集合局部放大

曼德布洛特(Mandelbrot)集及其生成代码1(C#)

图 3 Mandelbrot集合局部放大

      用数学方法对放大区域进行着色处理,这些区域就变成一幅幅精美的艺术图案,这些艺术图案人们称之为"分形艺术"。"分形艺术"以一种全新的艺术风格展示给人们,使人们认识到该艺术和传统艺术一样具有和谐、对称等特征的美学标准。这里值得一提的是对称特征,分形的对称性即表现了传统几何的上下、左右及中心对称。同时她的自相似性又揭示了一种新的对称性,即画面的局部与更大范围的局部的对称,或说局部与整体的对称。这种对称不同于欧几里德几何的对称,而是大小比例的对称,即系统中的每一元素都反映和含有整个系统的性质和信息。这一点与上面所讲的例子:"一头牛身体中的一个细胞中的基因记录着这头牛的全部生长信息",完全吻合。不管你是从科学的观点看还是从美学的观点看,她都是那么富有哲理,她是科学上的美和美学上的美的有机结合。

 

 

  曼德布洛特集合(Mandelbrot set)是在复平面上组成分形的点的集合。Mandelbrot集合可以用复二次多项式f(z)=z^2+c来定义。

  其中c是一个复参数。对于每一个c,从z=0开始对f(z)进行迭代

  序列 (0, f(0), f(f(0)), f(f(f(0))), .......)的值或者延伸到无限大,或者只停留在有限半径的圆盘内。

  曼德布洛特集合就是使以上序列不延伸至无限大的所有c点的集合。

  从数学上来讲,曼德布洛特集合是一个复数的集合。一个给定的复数c或者属于曼德布洛特集合M,或者不是。   比如,取c = 1,那么这个序列就是(0, 1, 2, 5, 26, ...),显然它的值会趋于无穷大;而如果取c = i,那么序列就是(0, i, -1+i, -i, -1+i, -i,...),它的值会一直停留在有限半径的圆盘内。

     事实上,一个点属于Mandelbrot集合当且仅当它对应的序列(由上面的二项式定义)中的任何元素的模都不大于2。这里的2就是上面提到的“有限半径”。

   

      曼德布洛特集合一般用计算机程序计算。对于大多数的分形软件,例如Ultra fractal,内部已经有了比较成熟的例子。     

    C#语言源代码 :(摘自C#入门经典Ch04Ex06,为了和上面的定义一致,我稍作了改动)

#region Using directives

using System;
using System.Collections.Generic;
using System.Text;

#endregion

namespace Ch04Ex06
{
   class Program
   {
      static void Main(string[] args)
      {
         double realCoord, imagCoord;
         double realTemp, imagTemp, realTemp2, arg;
         int iterations;
         for (imagCoord = -1.2; imagCoord <=1.2; imagCoord += 0.05)
         {
            for (realCoord = -1.77; realCoord <= .6; realCoord += 0.03)
            {
               iterations = 0;
               realTemp = realCoord;
               imagTemp = imagCoord;
               arg = (realCoord * realCoord) + (imagCoord * imagCoord);
               while ((arg < 4) && (iterations < 100))
               {
                  realTemp2 = (realTemp * realTemp) - (imagTemp * imagTemp)
                              + realCoord;
                  imagTemp = (2 * realTemp * imagTemp) + imagCoord;
                  realTemp = realTemp2;
                  arg = (realTemp * realTemp) + (imagTemp * imagTemp);
                  iterations += 1;
               }
               switch (iterations % 4)
               {
                  case 0:
                     Console.Write(".");
                     break;
                  case 1:
                     Console.Write("o");
                     break;
                  case 2:
                     Console.Write("O");
                     break;
                  case 3:
                     Console.Write("@");
                     break;
               }
            }
            Console.Write("\n");
         }
         Console.ReadKey();
      }
   }
}

曼德布洛特(Mandelbrot)集及其生成代码1(C#)    

     Mandelbrot图像中的每个位置都对于公式:N=x+y*i中的一个复数。实数部分是x,虚数部分是y,i是-1的平方根。图像中各个位置的x和y坐标对应于复数的x和y部分。

     图像中的每个位置用参数N来表示,它的模是x*x+y*y的平方根。如果这个值大于或等于2,则这个数字对应的位置值是0。如果值小于2,就把N的值改为N*N+N(即N=(x*x-y*y+x)+(2*x*y+y)*i)),并再次测试这个新N值。如果这个值大于或等于2,则这个数字对应的位置值是1。这个过程一直继续下去,直到给图像中的位置赋一个值,或迭代执行的次数多于指定的次数为止。

  

    Mandelbrot集合的图形表示可以让我们认识到纯粹的数学之美,与之相关的分形几何学则是无处不在的,不得不感叹数学的力量。由于分形几何学知识的匮乏,本文只能给出Mandelbrot集合的定义,并以最容易理解的方式绘制出该集合。这里使用的语言是C#,以后会尽量作出一些更为漂亮的图形。

   

    感兴趣的朋友可以参考:

    Mandelbrot_Set_Wikipedia

    神奇的分形艺术  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有