Mandelbrot集是所有分型曲线是最着名的,上图的左半部分即为一个典型的Mandelbrot集。但是我们并不仅仅是画出图形,而且控制光标在该图形上移动,随着光标的移动,我们会发现在图形的右半部分会生成另外一种有趣的图案,而且该图案将随着光标的移动不断变换,这就是有名的Mandelbrotjulia变换。我们通过此例,进一步说明如何利用构造的数学和图形模块,采用分型生成复杂美丽的图案。
8 a0 _9 m" K: U. c 设计思想:4 }/ J* u6 @; x! y" G! q
本例的设计思想和上例一样,都是采用分型,数学迭代公式将三维系统动态生成的像素投影到二维屏幕坐标上去。这里需要介绍的是Mandelbrot集和Julia集之间的对应关系。# P7 L6 P: d' y9 m
据说,Mandelbrot集是Julia集的映像 或字典,之所以这样,是因为二者都是用下列公式迭代生成的:
5 x1 c8 ^3 B% S5 X* Z: L Z=Z*Z+C( G7 f- d/ r' |
其中Z和C都是复杂的数字。对应不同的C值,都有唯一的Julia集和Mandelbrot集相对应。9 P! p, T$ ?5 i9 ^ D% ?) j
为了说明二者之间的关系,我们让屏幕平面代表C的一个范围,即横坐标对应C的实数部分,纵坐标对应C的虚数部分。程序首先在屏幕的左半部分生成一个Mandelbrot集,然后让用户在该图形的周围移动光标,对应每一个光标位置,即固定的C坐标,利用反转在屏幕的右半部分生成对应的Julia集。) _9 a$ c8 ~3 e4 T
程序代码/ ], R# U/ t- s( [# }+ P6 l
#include "stdio.h" /*包含头文件系统*/
( C7 U1 _8 N* n' X2 \. }- c! _$ D #include "stdlib.h"
& a w3 @1 w- y; f0 V4 ^6 e3 T #include "dos.h", X# k6 ^* T% f
#include "conio.h"/ o+ Z7 h' _* J5 ]- I0 y
#include "math.h"
+ W8 y) U8 X# J8 L; y; H #include "mem.h"
. S" b; q# Z' Z t. O6 s% P #include "math.inc" /*包含自定义头文件*/
" q0 R; t* _. S/ f/ \' y# d; Y, s #include "graph.inc" |