2.2
画圆
��这一节中,我们介绍画圆弧的Bresenham算法。
��不失一般性,假设圆的圆心位于坐标原点(如果圆心不在原点,可以通过坐标平移使其与原点重合),半径为R。以原点为圆心的圆C有四条对称轴:x=0,y=0,x=y和x=-y。若已知圆弧上一点P1=C(x, y),利用其对称性便可以得到关于四条对称轴的其它7个点,即:
��P2=C(x,-y),
��P3=C(-x,
y),
��P4=C(-x,-y),
��P5=C(y,x),
��P6=C(-y,x),
��P7=C(y,-x),
��P8=C(-y,-x)。
这种性质称为八对称性。因此,只要扫描转换八分之一圆弧,就可以通过圆弧的八对称性得到整个圆。
��为了方便起见,考虑位于第一象限的四分之一圆弧。如果以点(0,R)为起点按顺时针方向生成圆,则在第一象限内y是x的单调递减函数。假设圆心和起点均精确地落在像素中心上。
��如果已经知道圆弧上的一点(x,y),下一像素的选取有三种可能:正右方像素,右下角像素和正下方像素,分别用H,D和V表示,如图2.2所示。这三个像素的偏差的平方为:
��
��
。
令
��
,
��
。
如果
,说明圆弧到D向像素的距离大于到H向像素的距离,因此,下一个像素应当取H向的像素(xi+1,yi);反之,下一个像素应当取D向的像素(xi+1,yi-1)。经过更进一步地分析后,可以得到:
��如左 公式(2-2-1)
��如左 公式(2-2-2)
我们可以按以下规则选取下一个像素作为圆弧的最佳逼近点:
- 当时,如果
,则取为下一个像素点,否则取D为下一个像素点。
- 当
时,如果
,则取D为下一个像素点,否则取V为下一个像素点;
- 当
时取D为下一个像素点。
|
为了提高计算速度,我们可以在Bresenham画圆算法中采用只有加、减和移位(即:乘以2)操作的递推公式如下:
��a)
��b)
��c)
��可见,只用加、减和移位操作便完全可以实现Bresenham画圆算法。和改进的Bresenham画线算法一样,Bresenham画圆算法具有很高的速度和效率,因此得到广泛的应用。
|