我的分形画廊

                                   我的分形画廊
                         
[email protected]   2008.02.06

tag:迭代,分形,混沌,复杂性,吸引子

摘要:
  上大学的时候“不务正业”,整天整天的跑(泡)图书馆;"分形"这门有趣的数学几何的
分支领域也是在这段时间里接触的;我利用分形的原理用程序绘制了很多好看的图片;
以前上学时做的一些漂亮的分形图片:
http://blog.csdn.net/housisong/Gallery/280093.aspx

正文:
 
A:进入分形
  中国的海岸线有多长?
  这看似一个简单的问题,查资料或者搜索一下就能知道:“我国大陆海岸线长度为1.8万公里,居世
界第四位”.  然而,实际上这个海岸线长度数据是没有任何意义的,我们来看看实际的海岸线
  (图片从Google Earth截图  每幅图都在上副图的基础上放大其中的一个小区域)
  我的分形画廊_第1张图片

 我的分形画廊_第2张图片

我的分形画廊_第3张图片

我的分形画廊_第4张图片

 注意到问题没有,海岸线的长度和测量时使用的“尺子”将成比例关系,你用的测量精度越高的尺子,
海岸线将越长!
  这里有一幅很有趣的更加形象的图片:
   
http://www.matrixkey.com.cn/images/fenxing1.gif
  海岸线在多个尺度下用一维数据是不可测量的! 很明显,海岸线也肯定不是二维的;
它介于一维和二维之间的分数维! 我们需要一种新的几何来定量描述这类物体;

B:混沌游戏
  我们来做一个混沌游戏,并亲手绘制出我们的第一个分形图;
  1.在纸上绘制3个点(距离大致相等),然后从3点中选定一个我们的当前点;
  2.随机选择3个顶点中的一个,绘制它与当前点之间的中间点,并把这个点作为新的当前点;
  3.不断的重复2,我们就能得到一幅有趣的图片
  用计算机可以更快地完成这个过程,这样就得到了下面这幅图:
  我的分形画廊_第5张图片

C:牛顿迭代
  在数值计算中,经常使用牛顿迭代法来求解方程的根;在现在CPU中,除法和开方指令一般都是使
用该方法来实现的(我以前的blog文章中也有其原理说明和图示);
  对方程f(x)=0,设函数 g(x)= x - f(x) / f'(x) , 其中 f'(x) 为函数f(x) 的导函数。
则函数 g(x) 就是求解方程根的牛顿迭代公式。(迭代的意思是: 把函数返回值作为参数继续带入函数)
 对于选定的起始点x0,g(x)迭代大多都会收敛于f(x)=0的某个根,但也可能存在许多点,使 g(z)
迭代根本就不收敛,甚至可能出现混沌的状态。 牛顿迭代法也适用于复数函数方程求根;
  这里有一幅求解复数方程Z^3-1=0时形成的图片;将复平面的任意一点作为迭代初始值(x,y坐标正
好作为复数的实部和需部),不断的迭代,大多数点都会跌入某个解,记下这时迭代经过的次数绘制成
不同的颜色,就可以得到如下的图(包含放大的效果):
   我的分形画廊_第6张图片
 这些“珍珠链”具有无穷的细节,可以在任何尺度任意放大。

D:Mandelbrot集合与Julia集合
    对于复数函数 f(z)=z^2+z0; 给定任意的z0,迭代可以得到序列:z0^2 + z0,
z0^4 + 2*z0^3 + z0^2 + z0,...... 我们把经过任意次迭代以后而不发散的z0定义为
Mandelbrot集合,借助于计算机,我们可以得到以下的图像(属于集合的点标记为红色):

我的分形画廊_第7张图片

  放大这个集合的边缘将得到很多非常漂亮的图片:  
 


   这是一个非常简单的函数,但可以想象在没有计算机以前,研究这个方程的不逃逸集合将是非常困难的
事情,很多东西没有它看起来那么简单; 可以发现在M集周围也有很多“小的M集”,它们和大的M集很相似;
已经证明M集是一个连通集,也就是说这些小M集是串在一起的! 1980年当 B. B. Mandelbrot第一次画出它
的图形以来,M集就被认为是数学上最为复杂的集合之一,它又是如此的美丽,吸引了大批的科学家和爱好者。
M集又被称为“数学恐龙”,它已成为混沌、分形最为重要的标志之一。

  Julia集:复数函数 f(z)=z^2+zM, 其中zM为常量,对平面上的一点z0进行迭代,经足够多次迭代
后函数值不扩散,这类z0点组成的集合为Julia集,对每一个特定的zM值都构成一个相应的Julia集;
 可以证明:M集是使Julia集为连通的参数(zM)的集合。

   我的分形画廊_第8张图片
                             (Julia集 zM=(-0.74543,0.11301) )

E:我的分形画廊
  还有很多种分形生成方法和原理来绘制分形图,请查找相关资料;
 上学的时候,几乎翻遍了图书馆里分形、混沌、复杂学等方面的书籍,编写程序来绘制,并尽量绘制的
好看些;后来拨号上网以后(8块钱一个小时)才发现,原来有很多人和我一样,目标就是绘制“好看
的分形”,不拘泥于方程,而更在意“好看”,哈哈; 上网后我成了井底之蛙:D
 比如见这里:http://www.fractalartcontests.com/2007/winners.php

 我以前绘制的很多图片:  (还有很多图片在多次的硬盘意外损坏中丢失)

  我的分形画廊_第9张图片

(这幅图片是使用精确的方程描述的,涉及到4个仿射变换函数,每个函数
都描述了局部和整体的一个关系式;用这些方程能够绘制出这幅图,同样反
过来说,有了图,也能求出其对应的仿射变换函数(用尺子就能测量出函数
的系数);有人在研究图像的机器自动分形压缩就是从这里来的,这种方案
可以得到非常高的压缩率)

我的分形画廊_第10张图片

(这幅图片也是用仿射变换函数得到的 )

我的分形画廊_第11张图片

(叫"四点格式",是一种迭代的拟合方法;我把它绘制成一种动画时截的图)

我的分形画廊_第12张图片

(这幅图片也是用仿射变换函数得到的 )

 

我的分形画廊_第13张图片

(牛顿迭代法解方程图)

我的分形画廊_第14张图片

牛顿迭代法解方程结合Julia迭代


 最近做了一个简单的屏保(牛顿迭代法解方程图像) ,一些截图:

 我的分形画廊_第15张图片

 

 这里有3幅超大的分形图片(4000*3000),就不贴在文章中了(可以向我索要无损的PNG格式),链接如下:

 http://p.blog.csdn.net/images/p_blog_csdn_net/housisong/280093/o_xinkongj.jpg

 http://p.blog.csdn.net/images/p_blog_csdn_net/housisong/280093/o_kb3.JPG

  http://p.blog.csdn.net/images/p_blog_csdn_net/housisong/280093/o_m_gs345tb.jpg


 我的更多分形图片: http://blog.csdn.net/housisong/Gallery/280093.aspx

  经常有人问我,为什么我做的图片的颜色是连续变化的,其实很简单,假设得
到的运算数据(比如迭代次数、逃逸距离等等)为x,使用这样的颜色函数:
 Color(x)=abs(f(x)%511-255);  其中f(x)函数一般是个连续函数(处处可导),那
么Color(x)函数也将是一个连续函数,也可以用实力函数(推荐);很明显颜色函数也可以使用其他很多满足要求的
连续颜色映射函数;

关于编写分形程序,可以关注我的文章<分形程序高级技巧入门教程>: http://blog.csdn.net/housisong/archive/2011/01/23/6159317.aspx 

文章生成的一幅图:

我的分形画廊_第16张图片

你可能感兴趣的:(游戏,c,Google,Blog,图形)