- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学实验报告
实验内容 直线中点Bresenham算法的实现
专 业 计算机科学与技术
班 级
学 号
姓 名
指导教师 刘长松
年月 日
1、实验原理
Bresenham?算法?思想:
0≤d≤1?
当d<0.5:下一个象素应取右光栅点(xi+1,yi)?
当d≥0.5:下一个象素应取右上光栅点(xi+1,yi+1)?
e=d-0.5??假定直线斜率|k|≤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时,可任取上、下光栅点显示。
当斜率|k|>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)+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.5b)?
2、案例分析?
MFC提供的CDC类的成员函数MoveTo()和LineTo()函数用于绘制傻
任意斜率的直线段,直线段的颜色由所选用的画笔指定。MoveTo()函数移动当前点到参数(x,y)所指定的点,不画线;LineTo()函数从当前点画一直线段到参数(x,y)所指定的点,但不包括(x,y)。?本案例通过定义Cline类来模拟CDC类绘制任意斜的直线段,采用直线中点Bresenham算法。
3、算法设计?
对于0≤??≤1的直线段,中点Bresenham算法如下:?
(1)使用鼠标选择起点坐标p0(x0,y0)和终点坐标p1(x1,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<x1,重复步骤(4),否则结束。
4、主要代码
// Line.cpp: implementation of the CLine class.
#include "stdafx.h"
#include "Line.h"
#include "math.h"
#define Round(d) int(floor(d+0.5))//四舍五入宏定义
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CLine::CLine()
{
}
CLine::~CLine()
{
}
void CLine::MoveTo(CDC *pDC,CP2 p0)//绘制直线起点函数
{
P0=p0;
}
void CLine::MoveTo(CDC *pDC,double x0,double y0)//重载函数
{
P0=CP2(x0,y0);
}
void C
您可能关注的文档
- 覆盆子鉴别与含量测定方法学确认方案.doc
- 发电厂氨区二单元过滤器、蒸发器系统改造三措两案.docx
- 棚户区改造配套基础设施污水管网隧道工程水磨钻人工挖孔施工方案22.doc
- 1300亩人工造林施工组织设计方案.doc
- 餐饮食堂管理策划方案.doc
- 大学校医院工程节能施工方案.doc
- 地铁一号线内檐装修工程创优方案.doc
- 多功能中成药灭菌柜设备验证方案.doc
- 核电站Ⅱ期核岛安装国内工程EM4小口径管道安装方案.doc
- 金融电子防护舱解决方案V1.0.docx
- 2024年衢州市第三医院“精神科医师”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年绵阳富临医院有限公司“儿科医师”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年航空总医院“儿科医师”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年甘肃省人民医院“病理学与病理生理学”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年荆州市第一人民医院“儿科学”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年粤北人民医院“临床医师”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年石泉县熨斗镇中心卫生院“公卫岗位”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年淳安县第一人民医院“呼吸内科”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年涪陵区儿童医院(区人民医院)“临床岗”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
- 2024年淮安市第一人民医院“药学”岗位招聘考试2018-2023年真题荟萃含答案解析.docx
文档评论(0)