计算机图形学实验报告-直线中点bresenham算法的实现

计算机图形学实验报告-直线中点bresenham算法的实现

ID:6801559

大小:507.00 KB

页数:11页

时间:2018-01-26

计算机图形学实验报告-直线中点bresenham算法的实现_第1页
计算机图形学实验报告-直线中点bresenham算法的实现_第2页
计算机图形学实验报告-直线中点bresenham算法的实现_第3页
计算机图形学实验报告-直线中点bresenham算法的实现_第4页
计算机图形学实验报告-直线中点bresenham算法的实现_第5页
资源描述:

《计算机图形学实验报告-直线中点bresenham算法的实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、计算机图形学实验报告实验内容直线中点Bresenham算法的实现专业计算机科学与技术班级学号姓名指导教师刘长松    年月日一、实验题目直线中点Bresenham算法的实现二、实验要求学习VisualC++6.0集成编程环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础知识,从而掌握利用VisualC++进行图形程序设计的方法以及简单的图形画法,并编程实现Bresenham直线扫描转换程序,得出相应的输出图形。三、实验内容1.学习VisualC++6.0集成编成环境的使用;2.掌握VisualC++6.0图形设备接口

2、和常用图形程序设计、菜单设计等方法;3.编程实现Bresenham直线扫描转换程序,得出相应的输出图形;10四、实验过程1、实验原理Bresenham 算法 思想:0≤d≤1 当d<0.5:下一个象素应取右光栅点(xi+1,yi) 当d≥0.5:下一个象素应取右上光栅点(xi+1,yi+1) e=d-0.5  假定直线斜率

3、k

4、≤1。e0= -0.5,x每次加1,e = e + k; e<0时,下一像素取 (xi+1,yi),e = e + k ; e>0时,下一像素取 (xi+1,yi+1);e = e + k -1 ; e=0时,可

5、任取上、下光栅点显示。当斜率

6、k

7、>1时,同理,只是y每次加1,x是否变化取决于增量e。中点算法 d =2F(M)=2F(Xp+1,Yp+0.5)=2(a(Xp+1)+b(Yp+0.5)+c)            其中a=y0-y1, b=x1-x0, c=x0y1-x1y0 当d<0,M在L(Q点)下方,取右上方T为下一个象素; 此时再下一个象素的判别式为:          d’ = 2F(Xp+2,Yp+0.5)=2(a(Xp+2)+b(Yp+0.5)+c)              = 2(a(Xp+1)+b(Yp+0.5)+

8、c) +2a = d + 2a; 当d>0,M在L(Q点)上方,取右方B为下一个象素; 此时下一个象素的判别式为:       d’ = 2F(Xp+2,Yp+1.5)=2(a(Xp+2)+b(Yp+1.5)+c)          = 2(a(Xp+1)+b(Yp+0.5)+c) +2(a +b) = d + 2(a + b); 当d=0,选T或B均可,约定取B为下一个象素; d0 = 2F(X0+1,Y0+0.5) = 2(a(X0+1)+b(Y0+0.5)+c)                  = 2(F(X0,Y0)+a+0.

9、5b) 2、案例分析 10MFC提供的CDC类的成员函数MoveTo()和LineTo()函数用于绘制傻任意斜率的直线段,直线段的颜色由所选用的画笔指定。MoveTo()函数移动当前点到参数(x,y)所指定的点,不画线;LineTo()函数从当前点画一直线段到参数(x,y)所指定的点,但不包括(x,y)。 本案例通过定义Cline类来模拟CDC类绘制任意斜的直线段,采用直线中点Bresenham算法。3、算法设计 对于0≤?≤1的直线段,中点Bresenham算法如下: (1)使用鼠标选择起点坐标p0(x0,y0)和终点坐标p1(x1,

10、y1)。要求起点的的坐标小于等于终点的x坐标。 (2)定义直线段当前点坐标x,y,定义中点误差项d,定义直线斜k,定义像素点颜色clr。 (3)x=x0,y=y0,计算d=0.5-k,k=(y1-y0)/(x1-x0), clr=CRGB(0,0,1) (4)绘制点(x,y),判断d的符号。若d<0,则(x,y)更新为(x+1,y+1),d更新为d+1-k;否则(x,y)更新为(x+1,y),d更新为d-k。 (5)如果当前点x

11、ineclass.#include"stdafx.h"#include"Line.h"#include"math.h"#defineRound(d)int(floor(d+0.5))//四舍五入宏定义#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif10CLine::CLine(){}CLine::~CLine(){}voidCLine::MoveTo(CDC*pDC,CP2p0)//绘制直线起点函数{P0=p0;}voi

12、dCLine::MoveTo(CDC*pDC,doublex0,doubley0)//重载函数{P0=CP2(x0,y0);}voidCLine::LineTo(CDC*pDC,CP2p1){P1=p1;C

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

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

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