几个图形(04)
|
Mandelbrot集是所有分型曲线是最著名的,上图的左半部分即为一个典型的Mandelbrot集。但是我们并不仅仅是画出图形,而且控制光标在该图形上移动,随着光标的移动,我们会发现在图形的右半部分会生成另外一种有趣的图案,而且该图案将随着光标的移动不断变换,这就是有名的Mandelbrot--julia变换。我们通过此例,进一步说明如何利用构造的数学和图形模块,采用分型技术生成复杂美丽的图案。 设计思想: 本例的设计思想和上例一样,都是采用分型技术,数学迭代公式将三维系统动态生成的像素投影到二维屏幕坐标上去。这里需要介绍的是Mandelbrot集和Julia集之间的对应关系。 据说,Mandelbrot集是Julia集的映像 或字典,之所以这样,是因为二者都是用下列公式迭代生成的: Z(n+1)=Z(n)*Z(n)+C 其中Z和C都是复杂的数字。对应不同的C值,都有唯一的Julia集和Mandelbrot集相对应。 为了说明二者之间的关系,我们让屏幕平面代表C的一个范围,即横坐标对应C的实数部分,纵坐标对应C的虚数部分。程序首先在屏幕的左半部分生成一个Mandelbrot集,然后让用户在该图形的周围移动光标,对应每一个光标位置,即固定的C坐标,利用反转技术在屏幕的右半部分生成对应的Julia集。 程序代码如下: #include "stdio.h" /*包含头文件系统*/ #include "stdlib.h" #include "dos.h" #include "conio.h" #include "math.h" #include "mem.h" #include "math.inc" /*包含自定义头文件*/ #include "graph.inc" #define XMin -2.20 /*定义坐标及矩阵参数*/ char source[160]; int Iterate(float cx, float cy) /*Julia集向Mandelbrot集的变换*/ x=cx; void Pix(int x, int y, int col) /*在图上绘制一象素点*/ Plot(x, y, col); void CalcMSet() /*根据迭代次数决定颜色并绘制象素点*/ Draw(0, 0, Res-1, 0, 35); void CalcJSet(float cx, float cy) /*利用反转技术计算Julia集*/ x=0; |

