§3.2圆、圆弧的生成—Bresenham算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§3.2圆的生成——Bresenham算法
条件:给定圆心(x c,y c)和半径R
约定:只考虑圆心在原点,半径为整数R的圆x2+y2.=R2。对于圆心不在原点的圆,可先通过平移转换,化为圆心在原点的圆,再进行扫
描转换,把所得到的像素集合加上一个位移量,就可以把目标圆光
栅化。
在众多圆的生成算法,如逐点比较法、角度DDA法、Bresenham算法中,Bresenham画圆法是一种最简单有效的的方法。
首先注意到只要生成一个八分圆,那么,圆的其它部分就可以通过一系列的对成变换得到。
1
2
3
4
5
6
7
8
由算法生成
y=x
第一八分圆关于y=x对称变换
第一四分圆关于x=0对称变换
上半圆关于y=0对称变换
如果以点x=0,y=R为起点按顺时针方向生成圆,则在第一象限内y是x 的单调递减函数。
要在这三个像素中选择一个使其与理想圆的距离的平方达到最小,即下
列数值中的最小者。
R
(0,R)
(R,0)
x
y
这样,从圆上任一点出发,按顺时针方向生成圆时,为了最佳逼近该圆,对于下一像素的取法只有三种可能的选择,即正右方像素、正下方像素和右下角像素,分别记作:m H、m V、m D。
(x i,y i)
(x i,y i-1)
(x i+1,y i)
(x i+1,y i-1)
m H
m D
m V
m H=|(x i+1)2+(y i)2-R2|
m V=|(x i)2+(y i+1)2-R2|
m D=|(x i+1)2+(y I-1)2-R2|
m H
(x i,y i)
(x i+1,y i)
(x i+1,y i+1)
(x i+1,y i-1)
(x i-1,y i-1)
(x i,y i-1)
m V
m D
1
2
3
5
4
圆与点(x i,y i)附近光栅格网的相交关系只有五种可能。
从圆心到右下角像素(x i+1,y i-1)的距离平方m D与圆心到圆上点的距离平方R2之差等于:
Δi=(x i+1)2+(y i-1)2-R2
如果Δi<0,那么右下角像素(x i+1,y i-1)在该圆内(图中①、②),显然这时只能取像素(x i+1,y i),即m H;或像素(x i+1,y i-1),即m D。
为了确定究竟应该选择哪一个像素,首先考察情形①,为此计算理想圆到像素m H的距离平方与理想圆到像素m D的距离平方之差,即:
=|(x i+1)2+(y i)2-R2|-| (x i+1)2+(y i-1)2-R2|
如果<0,那么圆到右下方像素(m D)的距离大于圆到正右方像素(m H)的距离。反之,如果>0,圆到正右方像素(m H)的距离较大。这样
当<0,取像素m H(x I+1,y i)
当>0,取像素m D(x I+1,y I-1)
当=0时,两者距离相等,规定取正右方像素(m H)。
对于情形①,右下方像素(m D),总是位于圆内,而正右方像素(m H)总是位于圆外,即
(x i+1)2+(y i)2-R2>0
(x i+1)2+(y i-1)2-R2<0
因此的计算可简化为:
=(x i+1)2+(y i)2-R2-[ R2 -(x i+1)2-(y i-1)2]
=2[(x i+1)2+(y i-1)2- R2]+2y i-1
=2(Δi+y i)-1
其次,考虑情形②。由于y是x的单调递减函数,所以只能选择右方像素(x i+1,y i)。因为右方像素(x i+1,y i)和右下方像素(x i+1,y i-1)这时都位于圆内,故表达式中有如下关系:
(x i+1)2+(y i)2-R2<0
i i 因此,<0。:根据与情形①相同的判别准则,这时应选像素
(x i +1,y i )。
如果Δi >0,右下角像素(x i +1,y i -1)位于圆外,(图中③、④),显然这
时只能取像素(x i +1,y i -1),即m D ;或像素(x i ,y i -1),即m V 。
为了确定究竟应该选择哪一个像素,首先考察情形③,为此计算理想圆
到像素m D 的距离平方与理想圆到像素m V 的距离平方之差,即:
’=|(x i +1)2+(y i -1)2-R 2|-| (x i )2+(y i -1)2-R 2|
如果’<0,那么圆到下方像素(m V )的距离大于圆到右下方像素(m D )的距
离。反之,如果’>0,圆到右下方像素(m D )的距离较大。这样
当‘<0,取像素m D (x i +1,y i -1)
当‘>0,取像素m V (x i ,y i -1)
当’=0时,两者距离相等,规定取右下方像素(m D )。
由于右下角像素(x i +1,y i -1)位于圆外,而下方像素(x i ,y i -1)位于圆内,所
以对于情形③,作为’分量有如下关系:
(x i +1)2+(y i -1)2-R 2>0
(x i )2+(y i -1)2-R 2<0
因此’的计算可简化为:
’’=(x i +1)2+(y i -1)2-R 2-[ R 2 -(x i )2-(y i
-1)2] =2[(x i +1)2+(y i -1)2- R 2]-2x i -1
=2(Δi +x i )-1
对于情形④,再次注意到由于y 是x的单调递减函数,因此这时需选取下
方像素(x i ,y i -1)。这时正下方和右下角两像素均位于圆外,即’的分量有如下关系: