www.gusucode.com > VC++牛顿法解方程之混沌情况图形示例源代码源码程序 > VC++牛顿法解方程之混沌情况图形示例源代码源码程序\code\fc1.cpp

    //Download by http://www.NewXing.com
/* 

//    和混沌密切相关的另一门学科是分形学。分形是由IBM公司的
//科学家曼德勃罗特在1975年提出的,作为计算机图形学的一个分支,
//用分形的方法生成的图像向人们展示了在简单的数学模型中蕴涵的
//内在美、对称性和复杂性。下面的第一幅图被称作曼德勃罗特集,
//其余几幅分别是对它的某个细节放大得到的。

//    曼德勃罗特集的数学模型非常简单。假设有复数Z和μ,用下式
//迭代计算:Z=Z2+μ,由于μ的取值不同,经过若干次数迭代以后Z
//的幅值可能趋向无穷,也可能保持有界,曼德勃罗特集就是那些使
//Z保持有界的μ的集合,把μ在复平面上的分布作成图像,就像上
//面演示的那样具有极其复杂的结构。

//下面的程序用TC2.0编写, 假设屏幕的分辨率为640×480。
#include <graphics.h>

main()
{
	int nThre=100; // 其中nThre代表设置的门限值,当迭代后Z的幅值的平方大于nThre则认为趋于无穷
	int xCord,yCord,nColor,nTimes; //xCord和yCord分别代表平面上的点的坐标位置,nColor代表作图时所使用的颜色,nTimes表示迭代的次数 
	float reP,rePmin=-1.5,rePmax=0.75; //reP表示由平面上一点所代表的μ值的实部,rePmax、rePmin分别代表μ值实部可取的最大值和最小值
	float imP,imPmin=-1.5,imPmax=1.5; //imP、imPmax和imPmin分别代表μ的虚部及其容许的最大值和最小值
	float reZ,imZ,tmpReZ,deltImP,deltReP,absZ; 
	//reZ和imZ分别代表Z值的实部和虚部,deltImP、deltReP表示每一个象素的代表的实部和虚部值的大小,absZ代表Z值的幅值  
	int GraphDriver=DETECT,GraphMode; //初始化图形显示
	initgraph(&GraphDriver,&GraphMode,“ ");
	deltReP=(rePmax-rePmin)/640; //计算屏幕上一个像素表
	deltImP=(imPmax-imPmin)/480; //和虚部值的大小示的 
	for(xCord=1;xCord<641;xCord++)
	{
		for (yCord=1;yCord<481;yCord++)
		{
			reP=rePmin+deltReP*xCord; //计算屏幕上一点所
			imP=imPmin+deltImP*yCord;//代表的μ值大小
			reZ=0; imZ=0;
			for(nTimes=0;nTimes<160;nTimes++)
			{
				tmpReZ=reZ*reZ-imZ*imZ+reP; //计算迭代后的Z
				imZ=2*reZ*imZ+imP;//值及其幅值大小
				reZ=tmpReZ;absZ=reZ*reZ+imZ*imZ;
				if (absZ>nThre)
				{
					nColor=nTimes/10;
					break;
				}
				//如果幅值的平方大于门限值终止迭代
				nColor=0;
			}
			putpixel(xCord,yCord,nColor);//用指定的颜色作点
		}
	}
	getch();
}
//    上面的程序中,可以通过改变imPmin、imPmax以及rePmin与rePmax的值
//来对图像的局部细节进行放大,从而可以观察到更加精美复杂的图像,领悟
//分形图像的神韵。
//    曼德勃罗特集是人们发现的最早的分形图形之一,也是人们研究最多的
//分形图形之一,今年的菲尔兹奖(数学界的最高奖)得主麦克马兰就是因为
//在曼德勃罗特集研究中的成绩而获此殊荣的。这些年关于分形的研究已经渗
//透到科学领域的各个学科,在计算机领域利用分形的方法来对自然景物进行
//逼真的模拟是一个很具挑战性的研究方向。
//      (兰州大学2041信箱 梁昌霖 730000) 

*/