www.pudn.com > fenxingtuxingdeshengchengyuanma.rar > FractalView.cpp


// FractalView.cpp : implementation of the CFractalView class 
// 
 
#include "stdafx.h" 
#include "Fractal.h" 
 
#include "FractalDoc.h" 
#include "FractalView.h" 
 
#include "ItnDlg.h" 
//#include "haZhiDlg.h" 
#include "JuliaDlg.h" 
#include "string.h" 
#include "math.h" 
#include "stdlib.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
#define PI 3.1415926 
#define RAND_MAX 0x7fff 
COLORREF col[15]=  
{RGB(248,118,112),RGB(248,169,112),RGB(248,214,112), 
 RGB(237,248,112),RGB(183,248,112),RGB(132,248,112), 
 RGB(112,248,152),RGB(111,249,204),RGB(112,248,244), 
 RGB(111,204,249),RGB(109,158,250),RGB(116,108,251), 
 RGB(162,108,251),RGB(240,108,251),RGB(250,108,176)}; 
                  
///////////////////////////////////////////////////////////////////////////// 
// CFractalView 
 
IMPLEMENT_DYNCREATE(CFractalView, CView) 
 
BEGIN_MESSAGE_MAP(CFractalView, CView) 
	//{{AFX_MSG_MAP(CFractalView) 
	ON_COMMAND(ID_vonKoch, OnvonKoch) 
	ON_COMMAND(ID_FractalTree_1, OnFractalTree1) 
	ON_COMMAND(ID_Hillbert, OnHillbert) 
	ON_COMMAND(ID_FractalTree_2, OnFractalTree2) 
	ON_COMMAND(ID_Barnsley, OnBarnsley) 
	ON_COMMAND(ID_Sierpinski_Pad_2, OnSierpinskiPad2) 
	ON_COMMAND(ID_FractalTree_3, OnFractalTree3) 
	ON_COMMAND(ID_Levy, OnLevy) 
	ON_COMMAND(ID_Flamboyent, OnFlamboyent) 
	ON_COMMAND(ID_Sierpinski_Triangele_1, OnSierpinskiTriangele1) 
	ON_COMMAND(ID_Sierpinski_Triangele_2, OnSierpinskiTriangele2) 
	ON_COMMAND(ID_FractalTree_4, OnFractalTree4) 
	ON_COMMAND(ID_Branch, OnBranch) 
	ON_COMMAND(ID_Mandelbrot, OnMandelbrot) 
	ON_COMMAND(ID_Julia_of_Newton, OnJuliaofNewton) 
	ON_COMMAND(ID_Julia_1, OnJulia1) 
	ON_COMMAND(ID_Sierpinski_Triangele_3, OnSierpinskiTriangele3) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CFractalView construction/destruction 
 
CFractalView::CFractalView() 
{ 
	// TODO: add construction code here 
 
} 
 
CFractalView::~CFractalView() 
{ 
} 
 
BOOL CFractalView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CFractalView drawing 
 
void CFractalView::OnDraw(CDC* pDC) 
{ 
	CFractalDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	// TODO: add draw code for native data here 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CFractalView printing 
 
BOOL CFractalView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void CFractalView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void CFractalView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CFractalView diagnostics 
 
#ifdef _DEBUG 
void CFractalView::AssertValid() const 
{ 
	CView::AssertValid(); 
} 
 
void CFractalView::Dump(CDumpContext& dc) const 
{ 
	CView::Dump(dc); 
} 
 
CFractalDoc* CFractalView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFractalDoc))); 
	return (CFractalDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CFractalView message handlers 
 
void CFractalView::sqrz(double a, double b, double *x, double *y, double *theta) 
{ 
	if(a>0.0) 
		*theta=atan(b/a); 
	else if(a<0.0) 
		*theta=atan(b/a)+3.141593; 
	else 
		if(b>=0.0) 
			*theta=1.57079; 
		else 
			*theta=-1.57079; 
	*x=sqrt(sqrt(a*a+b*b))*cos((*theta)/2); 
	*y=sqrt(sqrt(a*a+b*b))*sin((*theta)/2); 
 
} 
 
void CFractalView::OnvonKoch()  
{ 
	// TODO: Add your command handler code here 
	//设置画图窗口显示标题 
	Win_Title="von Koch 曲线"; 
	GetDocument()->SetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	CPen Pen; 
	CPen *OldPen; 
	Pen.CreatePen(PS_SOLID,1,RGB(0,0,255)); 
	OldPen=dlgDC.SelectObject(&Pen); 
	//定义变量 
	int Itn,i,j,k; 
	double Angle=0,Len=200,X=80,Y=200; 
	char P[50000]="CD",C[]="CACBBCAC"; 
	int Prelen,Curlen,Clen=strlen(C); 
	//定义获取迭代次数的对话框 
	ItnDlg IDlg; 
	if(IDlg.DoModal()==IDOK && IDlg.m_Itn>0 && IDlg.m_Itn<8) 
	{ 
		Itn=IDlg.m_Itn; 
		for(i=0;ij+Clen-1;k--) 
						P[k]=P[k-Clen+1]; 
					for(k=j;kSetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	CPen Pen; 
	CPen *OldPen; 
	Pen.CreatePen(PS_SOLID,1,RGB(80,180,100)); 
	OldPen=dlgDC.SelectObject(&Pen); 
	//定义变量 
	int Itn=5,i,j,k,StackPointer=0; 
	int Prelen,EGHIJlen,Curlen; 
	double Angle=PI/2,Len=1200,X=400,Y=0; 
	double CurX[500],CurY[500],CurAngle[500]; 
	//定义每一步线段长度比例因子 
	double L[]={0.333333,0.25,0.9,0.9,0.8,0.65,0.68,0.73,0.77,0.77,0.8}; 
	//定义存放“图形数据”及各个复合“操作”的数组 
    char P[50000]="JIFFFZ",E[]="EI",G[]="BHCAGDI",H[]="AGCBHDI"; 
	char I[]="CAFFFDCBFFFDF",J[]="CBBBGDCAAAGDEJ"; 
	char *TempStr; 
	//根据迭代次数生成代表图形的字符串 
	for(i=0;iSetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	CPen Pen; 
	CPen *OldPen; 
	Pen.CreatePen(PS_SOLID,2,RGB(0,0,200)); 
	OldPen=dlgDC.SelectObject(&Pen); 
 
	int Itn,i,j,k,m=0; 
	int Prelen,DElen=11,Curlen; 
	double Angle=0,Len,L=480,X=160,Y=0; 
	char P[500000]="DZ",D[]="AECBDCDBCEA",E[]="BDCAECEACDB"; 
	char *TempStr; 
 
	ItnDlg IDlg; 
	if(IDlg.DoModal()==IDOK && IDlg.m_Itn>0 && IDlg.m_Itn<8) 
	{ 
		Itn=IDlg.m_Itn; 
		for(i=0;iSetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	CPen Pen; 
	CPen *OldPen; 
	Pen.CreatePen(PS_SOLID,1,RGB(80,180,100)); 
	OldPen=dlgDC.SelectObject(&Pen); 
	//定义变量 
	int Itn=4,i,j,k,StackPointer=0;	 
	double Angle=PI/2,Len=9,X=400,Y=0; 
	double CurX[400],CurY[400],CurAngle[400]; 
	//定义存放“图形数据”及各个复合“操作”的数组 
    char P[15000]="FZ",F[]="FFACAFBFBFDBCBFAFAFD"; 
	int Prelen,Curlen,Flen=strlen(F); 
	//根据迭代次数生成代表图形的字符串 
	for(i=0;iSetTitle(Win_Title); 
	CClientDC dlgDC(this); 
	int Itn=500000,i=0; 
	double X=0,Y=0,TempX=0,CurP=0; 
	double A[]={0.0,0.85,0.2,-0.15}, 
		   B[]={0.0,0.04,-0.26,0.28}, 
           C[]={0.0,-0.04,0.23,0.26}, 
		   D[]={0.16,0.85,0.22,0.24}, 
		   E[]={0.0,0.0,0.0,0.0}, 
		   F[]={0.0,80.0,80.0,20.0}, 
		   P[]={0.01,0.85,0.07,0.07}; 
	CurP=(double)rand()/(double)RAND_MAX; 
	while(iP[0] && CurP<(P[0]+P[1])) 
		{ 
			X=A[1]*X+B[1]*Y+E[1]; 
			Y=C[1]*TempX+D[1]*Y+F[1]; 
		} 
		else if(CurP>(P[0]+P[1]) && CurP<(P[0]+P[1]+P[2])) 
		{ 
			X=A[2]*X+B[2]*Y+E[2]; 
			Y=C[2]*TempX+D[2]*Y+F[2]; 
		} 
		else  
		{ 
			X=A[3]*X+B[3]*Y+E[3]; 
			Y=C[3]*TempX+D[3]*Y+F[3]; 
		} 
		dlgDC.SetPixel(400+(int)X,510-(int)Y,RGB(80,180,100)); 
		CurP=(double)rand()/(double)RAND_MAX; 
		i++; 
	} 
} 
 
void CFractalView::OnSierpinskiPad2()  
{ 
	// TODO: Add your command handler code here 
    Win_Title="Sierpinski垫"; 
	GetDocument()->SetTitle(Win_Title); 
	CClientDC dlgDC(this); 
	int Itn=500000,i=0; 
	double X=0,Y=0,TempX=0,CurP=0; 
	double A[]={0.5,0.5,0.5}, 
		   B[]={0,0,0}, 
           C[]={0,0,0}, 
		   D[]={0.5,0.5,0.5}, 
		   E[]={0,125,250}, 
		   F[]={0,216.5,0}, 
		   P[]={0.333,0.333,0.333}; 
	CurP=(double)rand()/(double)RAND_MAX; 
	while(iP[0] && CurP<(P[0]+P[1])) 
		{ 
			X=A[1]*X+B[1]*Y+E[1]; 
			Y=C[1]*TempX+D[1]*Y+F[1]; 
		} 
		else  
		{ 
			X=A[2]*X+B[2]*Y+E[2]; 
			Y=C[2]*TempX+D[2]*Y+F[2]; 
		} 
		dlgDC.SetPixel(150+(int)X,480-(int)Y,RGB(255,0,0)); 
		CurP=(double)rand()/(double)RAND_MAX; 
		i++; 
	} 
	 
} 
 
void CFractalView::OnFractalTree3()  
{ 
	// TODO: Add your command handler code here 
	Win_Title="分形树"; 
	GetDocument()->SetTitle(Win_Title); 
	CClientDC dlgDC(this); 
	int Itn=500000,i=0; 
	double X=0,Y=0,TempX=0,CurP=0; 
	double A[]={0.1,0.42,0.42,0.1}, 
		   B[]={0.0,-0.42,0.42,0.0}, 
           C[]={0.0,0.42,-0.42,0.0}, 
		   D[]={0.5,0.42,0.42,0.1}, 
		   E[]={0.0,0.0,0.0,0.0}, 
		   F[]={0.0,200.0,200.0,200.0}, 
		   P[]={0.05,0.4,0.4,0.15}; 
	CurP=(double)rand()/(double)RAND_MAX; 
	while(iP[0] && CurP<(P[0]+P[1])) 
		{ 
			X=A[1]*X+B[1]*Y+E[1]; 
			Y=C[1]*TempX+D[1]*Y+F[1]; 
		} 
		else if(CurP>(P[0]+P[1]) && CurP<(P[0]+P[1]+P[2])) 
		{ 
			X=A[2]*X+B[2]*Y+E[2]; 
			Y=C[2]*TempX+D[2]*Y+F[2]; 
		} 
		else  
		{ 
			X=A[3]*X+B[3]*Y+E[3]; 
			Y=C[3]*TempX+D[3]*Y+F[3]; 
		} 
		dlgDC.SetPixel(400+(int)X,510-(int)Y,RGB(80,180,100)); 
		CurP=(double)rand()/(double)RAND_MAX; 
		i++; 
	} 
	 
} 
 
void CFractalView::OnLevy()  
{ 
	// TODO: Add your command handler code here 
    Win_Title="Levy曲线"; 
	GetDocument()->SetTitle(Win_Title); 
	CClientDC dlgDC(this); 
	int Itn=500000,i=0; 
	double X=0,Y=0,TempX=0,CurP=0; 
	double A[]={0.5,0.5}, 
		   B[]={-0.5,0.5}, 
           C[]={0.5,-0.5}, 
		   D[]={0.5,0.5}, 
		   E[]={0,150}, 
		   F[]={0,150}, 
		   P[]={0.5,0.5}; 
	CurP=(double)rand()/(double)RAND_MAX; 
	while(iSetTitle(Win_Title); 
	CClientDC dlgDC(this); 
	int Itn=500000,i=0; 
	double X=0,Y=0,TempX=0,CurP=0; 
	double A[]={0.25,0.5,-0.25,0.5,0.5}, 
		   B[]={0,0,0,0,0}, 
           C[]={0,0,0,0,0}, 
		   D[]={0.5,0.5,-0.25,0.5,-0.25}, 
		   E[]={0.0,-75,75,0.0,150}, 
		   F[]={0.0,150.0,300.0,225.0,375}, 
		   P[]={0.154,0.307,0.078,0.307,0.154}; 
	CurP=(double)rand()/(double)RAND_MAX; 
	while(iP[0] && CurP<(P[0]+P[1])) 
		{ 
			X=A[1]*X+B[1]*Y+E[1]; 
			Y=C[1]*TempX+D[1]*Y+F[1]; 
		} 
		else if(CurP>(P[0]+P[1]) && CurP<(P[0]+P[1]+P[2])) 
		{ 
			X=A[2]*X+B[2]*Y+E[2]; 
			Y=C[2]*TempX+D[2]*Y+F[2]; 
		} 
		else if(CurP>(P[0]+P[1]+P[2]) && CurP<(P[0]+P[1]+P[2]+P[3])) 
		{ 
			X=A[3]*X+B[3]*Y+E[3]; 
			Y=C[3]*TempX+D[3]*Y+F[3]; 
		} 
		else  
		{ 
			X=A[4]*X+B[4]*Y+E[4]; 
			Y=C[4]*TempX+D[4]*Y+F[4]; 
		} 
		dlgDC.SetPixel(400+(int)X,480-(int)Y,RGB(0,200,0)); 
		CurP=(double)rand()/(double)RAND_MAX; 
		i++; 
	} 
	 
} 
 
void CFractalView::OnSierpinskiTriangele1()  
{ 
	// TODO: Add your command handler code here 
	//设置画图窗口显示标题 
	Win_Title="Sierpinski三角形"; 
	GetDocument()->SetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	CPen Pen; 
	CPen *OldPen; 
	Pen.CreatePen(PS_SOLID,1,RGB(0,0,0)); 
	OldPen=dlgDC.SelectObject(&Pen); 
	//定义变量 
	int i,j,k,n,S[100][100],T[100][100],X[12],Y[12]; 
	//定义所用的IFS的映射变换参数 
	double A[]={0.5,0.5,0.5}, 
		   B[]={0,0,0}, 
		   C[]={0,0,0}, 
		   D[]={0.5,0.5,0.5}, 
		   E[]={1,50,1}, 
		   F[]={1,1,50}; 
	//初始化 
	for(i=0;i<6;i++) 
	{ 
		X[i]=i*105; 
		X[i+6]=X[i]; 
		Y[i]=0; 
		Y[i+6]=115; 
	} 
	for(i=0;i<100;i++) 
	{ 
		T[0][i]=1; 
		T[i][0]=1; 
		T[99][i]=1; 
		T[i][99]=1; 
	} 
	//画图,n为迭代次数 
	dlgDC.Rectangle(CRect(80,260,180,360)); 
	for(n=1;n<12;n++) 
	{ 
		for(i=0;i<100;i++) 
			for(j=0;j<100;j++) 
				if(T[i][j]==1) 
					for(k=0;k<3;k++) 
						S[(int)(A[k]*i+B[k]*j+E[k])][(int)(C[k]*j+D[k]*j+F[k])]=1; 
					for(i=0;i<100;i++) 
						for(j=0;j<100;j++) 
						{ 
							T[i][j]=S[i][j]; 
							S[i][j]=0; 
							if(T[i][j]==1) 
								dlgDC.SetPixel(80+i+X[n],360-(j+Y[n]),RGB(0,0,0)); 
						} 
	} 
			 
	dlgDC.SelectObject(OldPen); 
} 
 
void CFractalView::OnSierpinskiTriangele2()  
{ 
	// TODO: Add your command handler code here 
	//设置画图窗口显示标题 
	Win_Title="Sierpinski三角形(改进)"; 
	GetDocument()->SetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	CPen Pen; 
	CPen *OldPen; 
	Pen.CreatePen(PS_SOLID,1,RGB(0,0,0)); 
	OldPen=dlgDC.SelectObject(&Pen); 
	//定义变量 
	int i,j,k,l,m,n,Adr,Adr1,j0,Temp=1; 
	int S[1800],T[1800],X[10],Y[10],I[3],J[3]; 
	//定义所用的IFS的映射变换参数 
	double A[]={0.5,0.5,0.5}, 
		   B[]={0,0,0}, 
		   C[]={0,0,0}, 
		   D[]={0.5,0.5,0.5}, 
		   E[]={0,60,0}, 
		   F[]={0,0,60}; 
	//初始化 
	for(i=0;i<1800;i++) 
	{ 
		S[i]=0; 
		T[i]=0; 
	} 
	//设置初始集正方形B0的边界 
	for(i=0;i<15;i++) 
	{ 
		S[i]=255; 
		S[i+1785]=255; 
	} 
	i=15; 
	while(i<1875) 
	{ 
		S[i]=128; 
		S[i+14]=1; 
		i=i+15; 
	} 
	//确定每次图形的位置 
    for(i=0;i<5;i++) 
	{ 
		X[i]=i*125; 
		X[i+5]=X[i]; 
		Y[i]=0; 
		Y[i+5]=130; 
	} 
	//画图,n为迭代次数 
	dlgDC.Rectangle(CRect(80,240,200,360)); 
	for(n=1;n<10;n++) 
	{ 
		//Adr指示数据在S[1800]中的存放位置 
		for(Adr=0;Adr<1800;Adr++) 
		{ 
			if(S[Adr]!=0) 
			{ 
				//I是图像的行数,i从0到199 
				i=(int)(Adr/15.0); 
				j0=(Adr%15)*8; 
				for(k=0;k<8;k++) 
				{ 
					Temp=1; 
					for(m=0;m<7-k;m++) 
						Temp=2*Temp; 
					if((S[Adr] &Temp)!=0) 
					{ 
						//j是图像的列数,j从0到199,(i,j)确定图像的位置 
						j=j0+k; 
						//I[l],J[l]存放迭代后点的位置 
						for(l=0;l<3;l++) 
						{ 
							I[l]=(int)(A[l]*i+B[l]*j+E[l]); 
                            J[l]=(int)(C[l]*i+D[l]*j+F[l]); 
							dlgDC.SetPixel(80+I[l]+X[n],360-(J[l]+Y[n]),RGB(255,0,0)); 
							// adr1指示本次迭代后的结果在T〔1800]中的存放位置 
							Adr1=I[l]*15+(int)(J[l]/8); 
							//计算并存放本次迭代后的结果,采用或运算以便不破坏其他位的值 
							Temp=1; 
							for(m=0;m<(7-(J[l]%8));m++) 
								Temp=Temp*2; 
							T[Adr1]=T[Adr1]|Temp; 
						} 
					} 
				} 
			} 
		} 
		for(k=0;k<1800;k++) 
		{ 
			S[k]=T[k]; 
			T[k]=0; 
		} 
	}			 
	dlgDC.SelectObject(OldPen); 
	 
} 
 
void CFractalView::OnFractalTree4()  
{ 
	// TODO: Add your command handler code here 
	Win_Title="树"; 
	GetDocument()->SetTitle(Win_Title); 
	CClientDC dlgDC(this); 
	int Itn=500000,i=0; 
	double X=0,Y=0,TempX=0,CurP=0; 
	double A[]={0.05,0.05,0.45,0.46,0.433,0.421}, 
		   B[]={0,0,-0.321,-0.154,0.275,0.257}, 
           C[]={0,0,0.3856,0.171,-0.25,-0.353}, 
		   D[]={0.6,-0.5,0.383,0.423,0.476,0.3064}, 
		   E[]={0,0,0,0,0,0}, 
		   F[]={0,200,120,220,200,140}, 
		   P[]={0.1,0.1,0.2,0.2,0.2,0.2}; 
	CurP=(double)rand()/(double)RAND_MAX; 
	while(iP[0] && CurP<(P[0]+P[1])) 
		{ 
			X=A[1]*X+B[1]*Y+E[1]; 
			Y=C[1]*TempX+D[1]*Y+F[1]; 
		} 
		else if(CurP>(P[0]+P[1]) && CurP<(P[0]+P[1]+P[2])) 
		{ 
			X=A[2]*X+B[2]*Y+E[2]; 
			Y=C[2]*TempX+D[2]*Y+F[2]; 
		} 
		else if(CurP>(P[0]+P[1]+P[2]) && CurP<(P[0]+P[1]+P[2]+P[3])) 
		{ 
			X=A[3]*X+B[3]*Y+E[3]; 
			Y=C[3]*TempX+D[3]*Y+F[3]; 
		} 
        else if(CurP>(P[0]+P[1]+P[2]+P[3]) && CurP<(P[0]+P[1]+P[2]+P[3]+P[4])) 
		{ 
			X=A[4]*X+B[4]*Y+E[4]; 
			Y=C[4]*TempX+D[4]*Y+F[4]; 
			 
		} 
		else  
		{ 
			X=A[5]*X+B[5]*Y+E[5]; 
			Y=C[5]*TempX+D[5]*Y+F[5]; 
		} 
		dlgDC.SetPixel(400+(int)X,460-(int)Y,RGB(0,0,0)); 
		CurP=(double)rand()/(double)RAND_MAX; 
		i++; 
	} 
	 
} 
 
void CFractalView::OnBranch()  
{ 
	// TODO: Add your command handler code here 
	//设置画图窗口显示标题 
	Win_Title="树枝"; 
	GetDocument()->SetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	CPen Pen; 
	CPen *OldPen; 
	Pen.CreatePen(PS_SOLID,2,RGB(80,180,100)); 
	OldPen=dlgDC.SelectObject(&Pen); 
 
	int Itn=5,i,j,k,StackPointer=0; 
	 
	double Angle=PI/2,Len=90,X=400,Y=0; 
	double CurX[500],CurY[500],CurAngle[500]; 
	double L[]={0.333333,0.25,0.9,0.9,0.8}; 
	char P[500000]="FZ", 
		 F[]="FCAFDFCBFDF"; 
	int Prelen,Flen=strlen(F),Curlen; 
	for(i=0;ij+Flen-1;k--) 
					P[k]=P[k-Flen+1]; 
				for(k=j;kSetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	//定义变量 
	int i,j,k; 
	double X,Y,X1,Y1,U,V; 
	//画图 
	for(i=40;i<=540;i++) 
	{ 
		for(j=-249;j<=250;j++) 
		{ 
			U=i/200.0-0.8; 
			V=j/200.0; 
			X=0.0; 
			Y=0.0; 
			for(k=0;k<30;k++) 
			{ 
				X1=X*X-Y*Y-U; 
				Y1=2*X*Y-V; 
				if((X1*X1+Y1*Y1)>9.0) break; 
				X=X1; 
				Y=Y1; 
			} 
			if(k==30) 
			{ 
				dlgDC.SetPixel(100+i,260-j,RGB(0,0,0)); 
                dlgDC.SetPixel(100+i,260+j,RGB(0,0,0)); 
			} 
			else 
			{ 
				dlgDC.SetPixel(100+i,260-j,col[k%15]); 
                dlgDC.SetPixel(100+i,260+j,col[k%15]); 
			} 
		} 
	} 
} 
 
void CFractalView::OnJuliaofNewton()  
{ 
	// TODO: Add your command handler code here 
	//设置画图窗口显示标题 
	Win_Title="牛顿函数的Julia集"; 
	GetDocument()->SetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	//定义变量 
	int i,j,k,Itn=40; 
	double X,Y,FM,NX,NY,Epthl=0.001; 
	//画图 
	for(i=-200;i<=200;i++) 
	{ 
		for(j=-200;j<=200;j++) 
		{ 
			X=i/100.0; 
			Y=j/100.0; 
			for(k=0;kSetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	//定义变量 
	int i,j,k,sx=400,sy=260; 
	double X,Y,X1,Y1,A,B; 
	//定义获取复数lmd的对话框 
	JuliaDlg JDlg; 
	if(JDlg.DoModal()==IDOK && (JDlg.m_CX*JDlg.m_CX+JDlg.m_CY*JDlg.m_CY)<=4) 
	{ 
		//获取复数lmd的实部A和虚部B 
		A=JDlg.m_CX; 
		B=JDlg.m_CY; 
		//画图 
		for(i=-339;i<=340;i++) 
		{ 
			for(j=-249;j<=250;j++) 
			{ 
				X=i/160.0; 
				Y=j/160.0; 
				for(k=0;k<30;k++) 
				{ 
					X1=X*X-Y*Y-A; 
					Y1=2*X*Y-B; 
					if((X1*X1+Y1*Y1)>9.0) break; 
					X=X1; 
					Y=Y1; 
				} 
				if(k==30) 
					dlgDC.SetPixel(sx+i,sy-j,RGB(0,0,0)); 
				else 
                    dlgDC.SetPixel(sx+i,sy-j,col[k%15]); 
			} 
		} 
	} 
	 
} 
 
void CFractalView::OnSierpinskiTriangele3()  
{ 
	// TODO: Add your command handler code here 
	//设置画图窗口显示标题 
	Win_Title="Sierpinski三角形"; 
	GetDocument()->SetTitle(Win_Title); 
	//设置画图环境和画笔 
	CClientDC dlgDC(this); 
	//定义变量 
	int Itn,M=400,p,q,k; 
	double A=0.0,B=0.0,C=1.0,D=1.0,X=0.0,Y=0.0,X0=0.0,Y0=0.0,R=200.0; 
	//定义获取迭代次数的对话框 
	ItnDlg IDlg; 
	if(IDlg.DoModal()==IDOK && IDlg.m_Itn>0) 
	{ 
		Itn=IDlg.m_Itn; 
		for(p=0;p0.5) 
					{ 
						X=2*X; 
						Y=2*Y-1; 
					} 
					else if(X>=0.5) 
					{ 
						X=2*X-1; 
						Y=2*Y; 
					} 
					else 
					{ 
						X=2*X; 
						Y=2*Y; 
					} 
					if(X*X+Y*Y>R) break; 
				} 
				if(k==Itn) 
				{ 
					dlgDC.SetPixel(200+p,450-q,RGB(0,0,255)); 
				} 
			} 
		} 
	} 
 
	 
} 
 
//DEL void CFractalView::OnContextMenu(CWnd* pWnd, CPoint point)  
//DEL { 
//DEL 	// TODO: Add your message handler code here 
//DEL 	CMenu *m_IMenu; 
//DEL 	CPoint m_pPoint; 
//DEL      
//DEL 	m_pPoint=point; 
//DEL  
//DEL 	ClientToScreen(&m_pPoint); 
//DEL  
//DEL     m_IMenu=GetMenu(); 
//DEL  
//DEL     m_IMenu=m_IMenu->GetSubMenu(1); 
//DEL  
//DEL     m_IMenu->TrackPopupMenu(TPM_CENTERALIGN+TPM_LEFTBUTTON, 
//DEL 		m_pPoint.x,m_pPoint.y,this,NULL); 
//DEL  
//DEL 	 
//DEL }