计算机图形学--直线的生成算法的实现.doc

计算机图形学--直线的生成算法的实现.doc

ID:55040216

大小:382.50 KB

页数:7页

时间:2020-04-26

计算机图形学--直线的生成算法的实现.doc_第1页
计算机图形学--直线的生成算法的实现.doc_第2页
计算机图形学--直线的生成算法的实现.doc_第3页
计算机图形学--直线的生成算法的实现.doc_第4页
计算机图形学--直线的生成算法的实现.doc_第5页
资源描述:

《计算机图形学--直线的生成算法的实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验二直线的生成算法的实现班级08信计2班学号59姓名分数一、实验目的和要求1.理解直线生成的基本原理。2.掌握几种常用的直线生成算法。3.利用VisualC++实现直线生成的DDA算法。二、实验内容1.了解直线的生成原理,尤其是Bresenham画线法原理。2.掌握几种基本的直线生成算法:DDA画线法、Bresenham画线法、中点画线法。3.利用VisualC++实现直线生成的DDA算法,在屏幕上任意生成一条直线。三、实验步骤1.直线的生成原理:(1)DDA画线法也称数值微分法,是一种增量算法

2、。是一种基于直线的微分方程来生成直线的方法。(2)中点画线法原理以下均假定所画直线的斜率,如果在方向上的增量为1,则方向上的增量只能在之间。中点画线法的基本原理是:假设在坐标为的各像素点中,与直线最近者已经确定为,用小实心圆表示。那么,下一个与直线最近的像素只能是正右方的,或右上方的,用小空心圆表示。以为和的中点,则的坐标为。又假设是理想直线与垂直线的交点。显然,若在的下方,则离直线近,应取为下一像素点;若在的上方,则离直线近,应取为下一像素点。(3)Bresenham画线法原理直线的中点Bres

3、enham算法的原理:每次在主位移方向上走一步,另一个方向上走不走步取决于中点偏差判别式的值。给定理想直线的起点坐标为P0(x0,y0),终点坐标为P1(x1,y1),则直线的隐函数方程为:(3-1)构造中点偏差判别式d。-7-(1)当d<0时⑵当d≥0时2.实现前面所述的各种直线生成算法,包括DDA算法、中点生成算法、Bresenham生成算法等。程序运行后的菜单界面如图2-1所示。图2-1直线生成图形的程序运行界面首先创建工程名为“基本图形的生成与填充”的单文档应用程序框架,操作步骤如下:(1

4、)创建单文档应用程序框架。启动VisualC++,选择“文件/新建”菜单命令,在弹出的新建对话框中单击“工程”标签;选择.MFCAppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成与填充”(也可以使用英文名称),选择所要存放的位置后,单击“确定”按钮,出现Stept1对话框;选择“单个文档”选项,单击“下一步”按钮,在接着的Stept2~Stept5中,均可以直接单击“下一步”按钮完成应用程序框架的构建。也可以在Stept1步选择“单文档”(Singledocument)后,直

5、接单击“完成”按钮完成。(2)编辑菜单资源。在工作区中的ResourceView标签中,单击Menu项左边的“+”,然后双击其子项IDR_MAINFRAME,弹出编辑主菜单项,根据表1中定义的菜单项资源来编辑菜单,如图2--7-2所示。图2-2编辑主菜单项(3)添加消息处理函数。利用类向导(ClassWizard)为应用程序添加与菜单项相关的消息处理函数。右击菜单项标题,选择“建立类向导…”,在弹出的MFCClassWizard窗口中,选择MessageMaps标签,在ClassName栏中选择C

6、MyView,根据表2建立消息映射函数,如图2-3所示。MFCClassWizard会自动完成有关的函数声明。-7-图2-3添加消息处理函数(4)添加程序代码。在CMyView.cpp文件中相应的位置添加各算法的程序代码,在VisualC++的MFC中绘制图形,一般可以调用一个“CDC”类,从CDC开始,添加代码。-7-添加代码如下://DDA算法生成直线,起点(x0,y0),终点(x1,y1)。voidCMyView::OnDdaline(){CDC*pDC=GetDC();intx0=100,

7、y0=100,x1=300,y1=200,c=RGB(255,0,0);intx,y,i;floatdx,dy,k;dx=(float)(x1-x0);dy=(float)(y1-y0);k=dy/dx;x=x0;y=y0;if(abs(k)<1){for(;y<=y1;y++){pDC->SetPixel(x,int(y+0.5),c);y=y+k;}}if(abs(k)>=1){for(;y<=y1;y++){pDC->SetPixel(int(x+0.5),y,c);x=x+1/k;}}Re

8、leaseDC(pDC);}//中点算法生成直线voidCMyView::OnMidpointline(){CDC*pDC=GetDC();intx0=100,y0=100,x1=400,y1=300,c=RGB(0,0,0);floata,b,d1,d2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;d1=2*a;d2=2*(a=b);x=x0;-7-y=y0;pDC->SetPixel(x,y,c);while(x

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。