第四讲 改进的Bresanham算法圆的扫描转换

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2019/2/13
济南大学信息学院
12
改进1:为计算方便,令e=d-0.5
xi1 xi 1 y yi 1 (e 0) i1 (e 0) yi
• e初=-0.5, • 每走一步有e=e+k。 • if (e>0) then e=e-1
2019/2/13
图5-8 改进的Brensemham算法绘制直线的原理
2019/2/13 济南大学信息学院 10
xi1 xi 1 y yi 1 (d 0.5) i1 (d 0.5) yi
误差项的计算
• d初=0, • 每走一步:d=d+k • 一旦y方向上走了一步,d=d-1
第4讲 改进的Brensemham算法 圆的扫描转换
2019/2/13
济南大学信息学院
1
5.1.2 中点Bresenham算法
设两端点为P0 (x0,y0)和 P1 (x1,y1),则直线的方程
y yy 1 F ( x , y ) y kx b 0 , 其中 k 0 xx x 1 0
济南大学信息学院
误差项的递推 d<0:取点(xi+1, yi +1)
0≤k≤1
( xi+2, yi+1.5) ( xi+1, yi+0.5) ( xi, yi) d<0
下一个中点(xi+2, yi +1.5)
d F(xi 2, yi 1.5) yi 1.5 k(xi 2) b d 1 k
2019/2/13
Leabharlann Baidu
济南大学信息学院
9
过各行、各列像素中心构造一组虚拟网格 4.1.3 改进的Bresenham 算法 线,按直线从起点到终点的顺序计算直线
假定直线段的0≤k≤1 基本原理:
与网格线的交点,交点与网格线之间的误 差为d,根据d来确定该列网格中与此交点 最近的像素点。
k k k k k d d d d
2019/2/13
济南大学信息学院
11
算法步骤: ( 0≤k≤1 ) 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、d=0、x=x0、y=y0。 3.绘制点(x,y)。 4.d 更新为 d+k,判断 d 的符号。若 d>0.5,则 (x,y) 更 新为 (x+1,y+1),同时将 d 更新为 d-1;否则 (x,y) 更 新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。
yi 1.5 k(xi 1) b k
d F ( x , y ) F ( x 1 , y 0 . 5 ) y 0 . 5 k ( x 1 ) b M M i i i i
2019/2/13 济南大学信息学院 6
误差项的递推 d≥0:取点(xi+1, yi )
x
图 5-4 直 线 将 平 面 分 为 三 个 区 域
F(x,y)=y-2x-1=0
2019/2/13
济南大学信息学院
3
Bresenham算法的基本原理:在最大位移方向上走一步时, 在另一个方向上是否走步取决于误差项的判断。 假定0≤k≤1,x是最大位移方向
P u ( xi + 1, yi + 1) Q M (xi + 1, yi + 1/ 2 ) P (xi , yi ) 图5-5
d F ( x , y ) F ( x 1 , y 0 . 5 ) y 0 . 5 k ( x 1 ) b M M i i i i
2019/2/13 济南大学信息学院 7
初始值d的计算
0≤k≤1
d0 F ( x0 1, y0 0.5) y0 0.5 k ( x0 1) b y0 kx0 b k 0.5 0.5 k
该直线方程将平面分为三个区域: • 对于直线上的点,F(x,y)=0;
• 对于直线上方的点,F(x,y)>0;
• 对于直线下方的点,F(x,y)<0。
2019/2/13 济南大学信息学院 2
y F(x,y)=0 F(x,y)>0 x F(x,y)<0 F(x,y)=0
y
F(x,y)>0
F(x,y)<0
则有:
1 y y y
(d0 ) (d0 )
P u ( xi + 1, yi + 1) Q M (xi + 1, yi + 1/ 2 ) P (xi , yi ) 图5-5 P d ( xi + 1, yi ) B re n se m ha m 算 法 生 成 直 线 的 原 理
5
2019/2/13
0≤k≤1
下一个中点(xi+2, yi +0.5)
d F(xi 2, yi 0.5) yi 0.5 k(xi 2) b d k
( xi+2, yi+0.5) ( xi+1, yi+0.5) ( xi, yi) d>=0
yi 0.5 k(xi 1) b k
F ( x , y ) y kx b 0
2019/2/13
济南大学信息学院
8
用2d△x代替d
1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。
0≤k≤1
2.计算初始值△x、△y、d=△x-2△y、x=x0、y=y0。 3.绘制点(x,y)。判断d的符号。 若d<0,则(x,y)更新为(x+1,y+1),d更新为 d+2△x-2△y; 否则(x,y)更新为(x+1,y), d更新为d-2△y。 4.当直线没有画完时,重复步骤3。否则结束。
济南大学信息学院
13
算法步骤为: ( 0≤k≤1 )
1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。
2019/2/13
P d ( xi + 1, yi ) B re n se m ha m 算 法 生 成 直 线 的 原 理
济南大学信息学院 4
0≤k≤1
判别式:
F ( x , y ) y kx b
d F ( x , y ) F ( x 1 , y 0 . 5 ) y 0 . 5 k ( x 1 ) b M M i i i i
相关文档
最新文档