Visual C++茱莉亚分形图形绘制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.绘制茱莉亚图 (1)绘制窗口 首先在 VC 中建一个新的 Projects,选择项目类型为
MFC AppWizard(exe),在项目名称中键入 DrawJulial,按下 OK。
在 随 后 的 窗 口 中 选 择 Single Document, 选 中 Document/View architecture support,在语言中选中中文。
} void CBaseDraw::WMoveTo(double x,double y) {
XP1=x; YP1=y; WLineTo(x,y); } void CBaseDraw::WLineTo(double x,double y) { XP2=x; YP2=y; WClip(XP1,YP1,XP2,YP2); XP1=XP2; YP1=YP2; } void CBaseDraw::WClip(double X1,double Y1,double X2,double Y2) { enum {Empty,Left1,Right1,Bottom1,Top1} C,C1,C2; double X,Y; int XX1,YY1,XX2,YY2; C1=Empty;
switch(nColor) { case 1:
color=RGB(0,0,0); //黑 break; case 2: color=RGB(255,0,0); //红 break; case 3: color=RGB(0,255,0); //绿 break; case 4: color=RGB(0,0,255); //蓝 break; case 5: color=RGB(255,255,0); //黄 break; case 6: color=RGB(0,255,255); //浅蓝 break; case 7: color=RGB(170,0,255); //紫
C2=Empty; if(X1<WX1) C1=Left1; if(X1>WX2) C1=Right1; if(Y1<WY1) C1=Bottom1; if(Y1>WY2) C1=Top1; if(X2<WX1) C2=Left1; if(X2>WX2) C2=Right1; if(Y2<WY1) C2=Bottom1; if(Y2>WY2) C2=Top1; while((C1!=Empty)||(C2!=Empty)) {
color=RGB(0,0,0); //黑 break; case 2: color=RGB(255,0,0); //红 break; case 3: color=RGB(0,255,0); //绿
break; case 4:
color=RGB(0,0,255); //蓝 break; case 5: color=RGB(255,255,0); //黄 break; case 6: color=RGB(0,255,255); //浅蓝 break; case 7: color=RGB(170,0,255); //紫 break; case 8: color=RGB(188,145,71); //棕 break; case 9: color=RGB(182,182,182); //灰 break; case 10: color=RGB(255,193,183); //砖红 break;
DWORD dwTimeBegin,dwTimeEnd; dwTimeBegin=timeGetTime(); do {
dwTimeEnd=timeGetTime(); } while((dwTimeEnd-dwTimeBegin)<dwDelayTime); } void CBaseDraw::UserWindow(double F1,double F2,double F3,double F4,int nMove) { WX1=F1; WX2=F2; WY1=F3; WY2=F4; XRate=(MaxX-nMove*2)/(WX2-WX1); YRate=(MaxY-nMove*2)/(WY2-WY1); m_pDC->SetViewportOrg(nMove,nMove);
case 15: color=RGB(0,128,192); //暗蓝 break;
case 16: color=RGB(255,255,255); //白 break;
default: break;
} s_MyPen.CreatePen(PS_SOLID,1,color);
m_pOldPen=m_pDC->SelectObject(&s_MyPen); } void CBaseDraw::sleep(DWORD dwDelayTime) {
case 11: color=RGB(215,243,183); //草绿 break;
case 12: color=RGB(193,102,130); //赤红 break;
case 13: color=RGB(255,0,128); //洋红 break;
case 14: color=RGB(64,128,128); //深灰 break;
在 Step 2 of 6 窗口中不要数据库支持(None)。 在 Step 3 of 6 窗口中选中不要复合文档支持(None), 将 Automation 的 ActiveX Controls 选项都取消 在 Step 4 of 6 窗口中将默认选项中的 Printing and print preview 和 Docking toolbar 去除,接下 Next。 对 Step 5 of 6 窗口和 Step 6 of 6 窗口不作修改, 按下 Finish。 此时 VC 已经自动将我们想要的程序框架建立完毕。 然后将 VC 框架建立的菜单中的编辑菜单完全删去,将 文件菜单中除退出一项外全部删去,在查看后面加入一个菜 单项,去掉其 Pop-up 属性,命其 ID 号为 ID_DRAWJULIAL, Caption 为绘制茱莉亚图。 (2)定义消息映射函数 在 Class Wizard 中选择 Message Maps 栏,在 Class Name 栏 中 选 择 CDrawJulialView, 在 Object IDs 中 选 择
{ } void CBaseDraw::GetMaxX() {
CRect s_Rect; m_pDC->GetWindow()->GetClientRect(s_Rect); MaxX=s_Rect.right; } void CBaseDraw::GetMaxY() { CRect s_Rect; m_pDC->GetWindow()->GetClientRect(s_Rect); MaxY=s_Rect.bottom; } void CBaseDraw::Line(int x1,int y1,int x2,int y2) { m_pDC->MoveTo(x1,y1); m_pDC->LineTo(x2,y2); } COLORREF CBaseDraw::GetColor(int nColor) { COLORREF color;
void WClip(double X1,double Y1,double X2,double Y2);
void ShowError(); void sleep(DWORD dwDelayTime); COLORREF GetColor(int nColor); }; #endif
源程序 BaseDraw.cpp 代码如下: //BaseDraw.cpp: implementation of the CBaseDraw class. #include "stdafx.h" #include "BaseDraw.h" #include "mmsystem.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif //Construction/Destruction CBaseDraw::CBaseDraw() { } CBaseDraw::~CBaseDraw()
case 15: color=RGB(0,128,192); //暗蓝 break;
default: break;
} return (color); } void CBaseDraw::SetColor(int nColor) { s_MyPen.DeleteObject(); COLORREF color; switch(nColor) { case 1:
ID_DRAWJULIAL,为其 COMMAND 消息建立一个消息映射函数。 (3)建立代码 1.类 CBaseDraw 是一个基本的绘图函数,可以作为基
类使用。CJulial 类就是从 CBaseDraw 继承下来的类。由于 在 CBaseDraw 的 成 员 函 数 sleep 中 调 用 了 系 统 函 数 timeGetTime(),因此要做以下工作:
{ public:
CBaseDraw(); virtual ~CBaseDraw(); protected: CDC *m_pDC; CPen *m_pOldPen; CPen s_MyPen; int MaxX,MaxY; double WX1,WX2,WY1,WY2,XP1,YP1,XP2,YP2,XRate,YRate; protected: void GetMaxX(); void GetMaxY(); void SetColor(int nColor); void Line(int x1,int y1,int x2,int y2); void UserWindow(double F1,double F2,double F3,double F4,int nMove); void WMoveTo(double x,double y); void WLineTo(double x,double y); void lineto(int x,int y); void moveto(int x,int y);
选择主菜单的 Project 项中的 Setting,在弹出的对话 框中选择 Link 页,在 Object/library modules 项中加入 “代码如下: //BaseDraw.h: interface for the CBaseDraw class #if !defined(AFX_BASEDRAW_H__CB43CA20_175A_11D4_81F F_94DCC6655E1C__INCLUDED_) #define AFX_BASEDRAW_H__CB43CA20_175A_11D4_81FF_94DCC6655E1 C__INCLUDED_ #if _MSC_VER > 1000 #pragma once # endif //_MSC_VER >1000 #define pi 3.141592654 //基本绘图类 class CBaseDraw
break; case 8:
color=RGB(188,145,71); //棕 break; case 9: color=RGB(182,182,182); //灰 break; case 10: color=RGB(255,193,183); //砖红 break; case 11: color=RGB(215,243,183); //草绿 break; case 12: color=RGB(193,102,130); //赤红 break; case 13: color=RGB(255,0,128); //洋红 break; case 14: color=RGB(64,128,128); //深灰 break;
MFC AppWizard(exe),在项目名称中键入 DrawJulial,按下 OK。
在 随 后 的 窗 口 中 选 择 Single Document, 选 中 Document/View architecture support,在语言中选中中文。
} void CBaseDraw::WMoveTo(double x,double y) {
XP1=x; YP1=y; WLineTo(x,y); } void CBaseDraw::WLineTo(double x,double y) { XP2=x; YP2=y; WClip(XP1,YP1,XP2,YP2); XP1=XP2; YP1=YP2; } void CBaseDraw::WClip(double X1,double Y1,double X2,double Y2) { enum {Empty,Left1,Right1,Bottom1,Top1} C,C1,C2; double X,Y; int XX1,YY1,XX2,YY2; C1=Empty;
switch(nColor) { case 1:
color=RGB(0,0,0); //黑 break; case 2: color=RGB(255,0,0); //红 break; case 3: color=RGB(0,255,0); //绿 break; case 4: color=RGB(0,0,255); //蓝 break; case 5: color=RGB(255,255,0); //黄 break; case 6: color=RGB(0,255,255); //浅蓝 break; case 7: color=RGB(170,0,255); //紫
C2=Empty; if(X1<WX1) C1=Left1; if(X1>WX2) C1=Right1; if(Y1<WY1) C1=Bottom1; if(Y1>WY2) C1=Top1; if(X2<WX1) C2=Left1; if(X2>WX2) C2=Right1; if(Y2<WY1) C2=Bottom1; if(Y2>WY2) C2=Top1; while((C1!=Empty)||(C2!=Empty)) {
color=RGB(0,0,0); //黑 break; case 2: color=RGB(255,0,0); //红 break; case 3: color=RGB(0,255,0); //绿
break; case 4:
color=RGB(0,0,255); //蓝 break; case 5: color=RGB(255,255,0); //黄 break; case 6: color=RGB(0,255,255); //浅蓝 break; case 7: color=RGB(170,0,255); //紫 break; case 8: color=RGB(188,145,71); //棕 break; case 9: color=RGB(182,182,182); //灰 break; case 10: color=RGB(255,193,183); //砖红 break;
DWORD dwTimeBegin,dwTimeEnd; dwTimeBegin=timeGetTime(); do {
dwTimeEnd=timeGetTime(); } while((dwTimeEnd-dwTimeBegin)<dwDelayTime); } void CBaseDraw::UserWindow(double F1,double F2,double F3,double F4,int nMove) { WX1=F1; WX2=F2; WY1=F3; WY2=F4; XRate=(MaxX-nMove*2)/(WX2-WX1); YRate=(MaxY-nMove*2)/(WY2-WY1); m_pDC->SetViewportOrg(nMove,nMove);
case 15: color=RGB(0,128,192); //暗蓝 break;
case 16: color=RGB(255,255,255); //白 break;
default: break;
} s_MyPen.CreatePen(PS_SOLID,1,color);
m_pOldPen=m_pDC->SelectObject(&s_MyPen); } void CBaseDraw::sleep(DWORD dwDelayTime) {
case 11: color=RGB(215,243,183); //草绿 break;
case 12: color=RGB(193,102,130); //赤红 break;
case 13: color=RGB(255,0,128); //洋红 break;
case 14: color=RGB(64,128,128); //深灰 break;
在 Step 2 of 6 窗口中不要数据库支持(None)。 在 Step 3 of 6 窗口中选中不要复合文档支持(None), 将 Automation 的 ActiveX Controls 选项都取消 在 Step 4 of 6 窗口中将默认选项中的 Printing and print preview 和 Docking toolbar 去除,接下 Next。 对 Step 5 of 6 窗口和 Step 6 of 6 窗口不作修改, 按下 Finish。 此时 VC 已经自动将我们想要的程序框架建立完毕。 然后将 VC 框架建立的菜单中的编辑菜单完全删去,将 文件菜单中除退出一项外全部删去,在查看后面加入一个菜 单项,去掉其 Pop-up 属性,命其 ID 号为 ID_DRAWJULIAL, Caption 为绘制茱莉亚图。 (2)定义消息映射函数 在 Class Wizard 中选择 Message Maps 栏,在 Class Name 栏 中 选 择 CDrawJulialView, 在 Object IDs 中 选 择
{ } void CBaseDraw::GetMaxX() {
CRect s_Rect; m_pDC->GetWindow()->GetClientRect(s_Rect); MaxX=s_Rect.right; } void CBaseDraw::GetMaxY() { CRect s_Rect; m_pDC->GetWindow()->GetClientRect(s_Rect); MaxY=s_Rect.bottom; } void CBaseDraw::Line(int x1,int y1,int x2,int y2) { m_pDC->MoveTo(x1,y1); m_pDC->LineTo(x2,y2); } COLORREF CBaseDraw::GetColor(int nColor) { COLORREF color;
void WClip(double X1,double Y1,double X2,double Y2);
void ShowError(); void sleep(DWORD dwDelayTime); COLORREF GetColor(int nColor); }; #endif
源程序 BaseDraw.cpp 代码如下: //BaseDraw.cpp: implementation of the CBaseDraw class. #include "stdafx.h" #include "BaseDraw.h" #include "mmsystem.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif //Construction/Destruction CBaseDraw::CBaseDraw() { } CBaseDraw::~CBaseDraw()
case 15: color=RGB(0,128,192); //暗蓝 break;
default: break;
} return (color); } void CBaseDraw::SetColor(int nColor) { s_MyPen.DeleteObject(); COLORREF color; switch(nColor) { case 1:
ID_DRAWJULIAL,为其 COMMAND 消息建立一个消息映射函数。 (3)建立代码 1.类 CBaseDraw 是一个基本的绘图函数,可以作为基
类使用。CJulial 类就是从 CBaseDraw 继承下来的类。由于 在 CBaseDraw 的 成 员 函 数 sleep 中 调 用 了 系 统 函 数 timeGetTime(),因此要做以下工作:
{ public:
CBaseDraw(); virtual ~CBaseDraw(); protected: CDC *m_pDC; CPen *m_pOldPen; CPen s_MyPen; int MaxX,MaxY; double WX1,WX2,WY1,WY2,XP1,YP1,XP2,YP2,XRate,YRate; protected: void GetMaxX(); void GetMaxY(); void SetColor(int nColor); void Line(int x1,int y1,int x2,int y2); void UserWindow(double F1,double F2,double F3,double F4,int nMove); void WMoveTo(double x,double y); void WLineTo(double x,double y); void lineto(int x,int y); void moveto(int x,int y);
选择主菜单的 Project 项中的 Setting,在弹出的对话 框中选择 Link 页,在 Object/library modules 项中加入 “代码如下: //BaseDraw.h: interface for the CBaseDraw class #if !defined(AFX_BASEDRAW_H__CB43CA20_175A_11D4_81F F_94DCC6655E1C__INCLUDED_) #define AFX_BASEDRAW_H__CB43CA20_175A_11D4_81FF_94DCC6655E1 C__INCLUDED_ #if _MSC_VER > 1000 #pragma once # endif //_MSC_VER >1000 #define pi 3.141592654 //基本绘图类 class CBaseDraw
break; case 8:
color=RGB(188,145,71); //棕 break; case 9: color=RGB(182,182,182); //灰 break; case 10: color=RGB(255,193,183); //砖红 break; case 11: color=RGB(215,243,183); //草绿 break; case 12: color=RGB(193,102,130); //赤红 break; case 13: color=RGB(255,0,128); //洋红 break; case 14: color=RGB(64,128,128); //深灰 break;