您所在位置: 网站首页 / Bresenham算法.doc / 文档详情
Bresenham算法.doc 立即下载
2024-07-05
约3.7千字
约7页
0
51KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

Bresenham算法.doc

Bresenham算法.doc

预览

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

10 金币

下载文档

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

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

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

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

2.1.2生成直线的Bresenham算法从上面介绍的DDA算法可以看到,由于在循环中涉及实型数据的加减运算,因此直线的生成速度较慢。在生成直线的算法中,Bresenham算法是最有效的算法之一。Bresenham算法是一种基于误差判别式来生成直线的方法。HYPERLINK"http://course.cug.edu.cn/cugThird/CGOL_NET/CLASS/course/2-1-2-a.htm"一、直线Bresenham算法描述:它也是采用递推步进的办法,令每次最大变化方向的坐标步进一个象素,同时另一个方向的坐标依据误差判别式的符号来决定是否也要步进一个象素。我们首先讨论m=△y/△x,当0≤m≤1且x1<x2时的Bresenham算法。从DDA直线算法可知这些条件成立时,公式(2-2)、(2-3)可写成:xi+1=xi+1(2-6)yi+1=yi+m(2-7)有两种Bresenham算法思想,它们各自从不同角度介绍了Bresenham算法思想,得出的误差判别式都是一样的。HYPERLINK"http://course.cug.edu.cn/cugThird/CGOL_NET/CLASS/course/2-1-2-a.htm"二、直线Bresenham算法思想之一:由于显示直线的象素点只能取整数值坐标,可以假设直线上第i个象素点坐标为(xi,yi),它是直线上点(xi,yi)的最佳近似,并且xi=xi(假设m<1),如下图所示。那么,直线上下一个象素点的可能位置是(xi+1,yi)或(xi+1,yi+1)。由图中可以知道,在x=xi+1处,直线上点的y值是y=m(xi+1)+b,该点离象素点(xi+1,yi)和象素点(xi+1,yi+1)的距离分别是d1和d2:d1=y-yi=m(xi+1)+b-yi(2-8)d2=(yi+1)-y=(yi+1)-m(xi+1)-b(2-9)这两个距离差是d1-d2=2m(xi+1)-2yi+2b-1(2-10)我们来分析公式(2-10):(1)当此值为正时,d1>d2,说明直线上理论点离(xi+1,yi+1)象素较近,下一个象素点应取(xi+1,yi+1)。(2)当此值为负时,d1<d2,说明直线上理论点离(xi+1,yi)象素较近,则下一个象素点应取(xi+1,yi)。(3)当此值为零时,说明直线上理论点离上、下两个象素点的距离相等,取哪个点都行,假设算法规定这种情况下取(xi+1,yi+1)作为下一个象素点。因此只要利用(d1-d2)的符号就可以决定下一个象素点的选择。为此,我们进一步定义一个新的判别式:pi=△x×(d1-d2)=2△y·xi-2△x·yi+c(2-11)式(2-11)中的△x=(x2-x1)>0,因此pi与(d1-d2)有相同的符号;这里△y=y2-y1,m=△y/△x;c=2△y+△x(2b-1)。下面对式(2-11)作进一步处理,以便得出误差判别递推公式并消除常数c。将式(2-11)中的下标i改写成i+1,得到:pi+1=2△y·xi+1-2△x·yi+1+c(2-12)将式(2-12)减去(2-11),并利用xi+1=xi+1,可得:pi+1=pi+2△y-2△x·(yi+1-yi)(2-13)再假设直线的初始端点恰好是其象素点的坐标,即满足:y1=mx1+b(2-14)由式(2-11)和式(2-14)得到p1的初始值:p1=2△y-△x(2-15)这样,我们可利用误差判别变量,得到如下算法表示:初始p1=2△y-△x(2-16)当pi≥0时:yi+1=yi+1,xi+1=xi+1,pi+1=pi+2(△y-△x)否则:yi+1=yi,xi+1=xi+1,pi+1=pi+2△y从式(2-16)可以看出,第i+1步的判别变量pi+1仅与第i步的判别变量pi、直线的两个端点坐标分量差△x和△y有关,运算中只含有整数相加和乘2运算,而乘2可利用算术左移一位来完成,因此这个算法速度快并易于硬件实现。HYPERLINK"http://course.cug.edu.cn/cugThird/CGOL_NET/CLASS/course/2-1-2-a.htm"三、直线Bresenham算法思想之二:由于象素坐标的整数性,数学点(xi,yi)与所取象素点(xi,yir)间会引起误差(εi),当xi列上已用象素坐标(xi,yir)表示直线上的点(xi,yi),下一直线点B(xi+1,yi+1),是取象素点C(xi+1,yir),还是D(xi+1,y(i+1)r)呢?设A为CD边的中点,正确的选择:若B点在A点上方,选择D点;否则,选C点。用误差式描述为:ε(xi+1)=BC-AC=(yi+1-yir)-0.5(2-8')求递推公式:ε(xi+2)=(
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

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

Bresenham算法

文档大小:51KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
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专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用