计算机图形学实验报告-直线中点Bresenham算法的实现.doc 立即下载
2025-01-15
约1.3万字
约11页
0
574KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

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

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

预览

免费试读已结束,剩余 6 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开



计算机图形学实验报告

实验内容直线中点Bresenham算法的实现
专业计算机科学与技术
班级
学号
姓名
指导教师刘长松

年月日
一、实验题目
直线中点Bresenham算法的实现
二、实验要求
学习VisualC++6.0集成编程环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础知识,从而掌握利用VisualC++进行图形程序设计的方法以及简单的图形画法,并编程实现Bresenham直线扫描转换程序,得出相应的输出图形。
三、实验内容
1.学习VisualC++6.0集成编成环境的使用;
2.掌握VisualC++6.0图形设备接口和常用图形程序设计、菜单设计等方法;
3.编程实现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:implementationoftheCLineclass.
#include"stdafx.h"
#include"Line.h"
#include"math.h"
#defineRound(d)int(floor(d+0.5))//四舍五入宏定义
#ifdef_DEBUG
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#definenewDEBUG_NEW
#endif
CLine::CLine()
{

}

CLine::~CLine()
{
	
}

voidCLine::MoveTo(CDC*pDC,CP2p0)//绘制直线起点函数
{	
	P0=p0;
}

voidCLine::MoveTo(CDC*pDC,doublex0,doubley0)//重载函数
{	
	P0=CP2(x0,y0);
}

voidCLine::LineTo(CDC*pDC,CP2p1)
{
	P1=p1;
	CP2p,t;
	CRGBclr=CRGB(0.0,0.0,0.0);//黑色像素
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

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

文档大小:574KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用