资源描述:
《实验1-中点画线和Bresenham画线算法的实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机图形学实验报告实验1使用画线算法,绘制直线段姓名系别班级学号实验日期指导教师实验成绩杜艾莲地信1012011.10.10一.实验目的及要求(1)掌握图形学中常用的三种画线算法:数值微分法、中点画线法和Bresenham画线算法。(2)掌握绘制直线的程序设计方法。(3)掌握使用文件来保存直线段的方法。(4)掌握从文本文件中恢复出直线的方法。二.实验内容使用VC++6.0开发环境,分别实现中点画线算法和Bresenham画线算法,绘制直线(注意,不能使用VC中已有的绘制直线的函数),并以文本文件的形式保存绘制的结果,可以从文本文件
2、中恢复出以前绘制过的直线。三.算法设计与分析输入P0(X0,Y0)和P1(X1,Y1)计算初始值△x,△yd=△x-2△y,x=X0,y=Y0(x,y)更新为(x+1,y+1),d更新为d+2△x-2△y(x,y)更新为(x+1,y),d更新为d-2△y结束Bresenham算法绘制直线的程序(仅包含整数运算)。voidMidBresenhamLine(intx0,inty0,intx1,inty1,intcolor){intdx,dy,d,UpIncre,DownIncre,x,y;if(x0>x1){x=x1;x1=x0;x0=
3、x;y=y1;y1=y0;y0=y;}x=x0;y=y0;dx=x1-x0;dy=y1-y0;d=dx-2*dy;UpIncre=2*dx-2*dy;DownIncre=-2*dy;while(x<=x1){putpixel(x,y,color);X++;if(d<0){y++;d+=UpIncre;}elsed+=DownIncre;}}一.程序调试及运行结果的自我分析与自我评价//testView.cpp:implementationoftheCTestViewclass#include"stdafx.h"#include"te
4、st.h"#include"testDoc.h"#include"testView.h"#include//ifstream、ofstream等位于其中#include#include//string类型需要#include"DlgInput.h"//CDlgInput类的头文件usingnamespacestd;#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif/
5、/CTestViewIMPLEMENT_DYNCREATE(CTestView,CView)BEGIN_MESSAGE_MAP(CTestView,CView)//{{AFX_MSG_MAP(CTestView)ON_COMMAND(ID_MENUITEM32771,OnMenuitem32771)ON_COMMAND(ID_MENUBRESENHAMLINE,OnMenubresenhamline)ON_COMMAND(ID_MENUCLEARVIEW,OnMenuclearview)ON_COMMAND(ID_FILE_OPEN
6、,OnFileOpen)ON_COMMAND(ID_FILE_SAVE,OnFileSave)//}}AFX_MSG_MAP//StandardprintingcommandsON_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()//CTestVie
7、wconstruction/destructionCTestView::CTestView(){//TODO:addconstructioncodeherem_nFlag=-1;//不是任何绘图类型}CTestView::~CTestView(){}BOOLCTestView::PreCreateWindow(CREATESTRUCT&cs){//TODO:ModifytheWindowclassorstylesherebymodifying//theCREATESTRUCTcsreturnCView::PreCreateWindo
8、w(cs);}//CTestViewdrawingvoidCTestView::OnDraw(CDC*pDC){CTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddraw