Mandelbrot集合是在复平面组成分形的点的集合,用复二次多项式 来定义
其中c是一个复参数。对于每一个c,从开始对fc(z)进行迭代。
序列 的元素的模(复数具有模的概念)或者延伸到无穷大,或者只停留在有限半径的圆盘内。Mandelbrot集合就是使以上序列不延伸至无限大的所有c点的集合。
简单来说,对于迭代式:fc(z) = z2 + c ,Mandelbrot Set 迭代过程中的z值是固定的,是使上述迭代式始终在某一范围内而不发散于无穷大的c值的集
合;而Julia Set的迭代过程中c是固定的,上述是使上述迭代式始终在某一范围内而不发散于无穷大的z值的集合。
从数学上来讲,Mandelbrot集合是一个复数的集合。一个给定的复数c或者属于Mandelbrot集合M,或者不属于。比如,取c = 1,那么这个序列就是(0, 1, 2, 5, 26, ...),显然它的值会趋于无穷大;而如果取c = i,那么序列就是(0, i, -1+i, -i, -1+i, -i,...),它的值会一直停留在有限半径的圆盘内。
事实上,一个点属于Mandelbrot集合当且仅当它对应的序列(由上面的二项式定义)中的任何元素的模都不大于2。这里的2就是上面提到的“有限半径”。
在计算机上绘制Mandelbrot集合
计算机的屏幕上的像素只有有限个,而Mandelbrot集合中的点则有无限个。
观察上面复平面的局部,Mandelbrot集合即黑色区域,实部从-2到1,虚部从-1到1,那么将两个点(-2, 1)和(1, -1)作为一个矩形的左上角顶点和右下角顶点,那么这个矩形就包含了整个Mandelbrot集合,该矩形的长为3,宽为2。我们可以将这个矩形与屏幕上的区域进行映射,也就是将屏幕上的一个像素映射为该矩形内的一点,如果该点属于Mandelbrot集合,就将该像素着为黑色,这样逐一对每个像素进行判断和着色,就可以模拟绘制Mandelbrot集合了。该矩形的长宽比为3:2,我们在屏幕上可以取600 * 400的矩形区域。
完成映射后来考虑如何判断一个点是否属于该集合。其根据就是上面的结论“一个点属于Mandelbrot集合当且仅当它对应的序列(由上面的二项式定义)中的任何元素的模都不大于2”,由于序列的的元素有无穷多个,我们只能取有限的迭代次数来模拟了,比如取100或1000次。
一个基本的Mandelbrot set的绘制<基于OpenGL>,没有设置复杂的颜色
一个给点着色的Mandelbrot set的绘制<基于OpenGL>
一个给点着色的Mandelbrot set的绘制 三次 <基于OpenGL>