图形天下:几个图形(04)来源: 发布时间:星期四, 2008年9月25日 浏览:48次 评论:0
3.漫步在Mandelbrot集
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; 0
相关文章
读者评论
发表评论 |