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 }