基于Bresenham算法圆弧的设计与算法分析
2021-07-13唐启见湖南软件职业学院
唐启见 湖南软件职业学院
一、圆的构建
圆形是在GUI设计过程中不可规避的重要图形,可以通过确定“一点一线”来描述一个圆形,“一点”为圆心,“一线”为圆的半径,圆心确定了圆的位置,半径确定了圆的大小。圆形及圆弧的生成算法主要有数值微分法、Bresenham画圆算法和中点画线法等。
由于圆形是一个对称的结构,不但左右对称,而且中心对称,所以利用Bresenham画圆算法只需要绘制出圆的一段圆弧,然后通过对称复制的方法即可实现整个圆的绘制。首先确定目标圆的圆心,然后以圆心为坐标原点建立对称坐标系,如先绘制第一象限的1/8段圆弧(如图1所示)。设最先确定的逼近像素点Pi-1的坐标为(xi-1,yi-1),那么在圆弧附近有两个或者多个逼近像素点,如图1中的Si(xi-1+1,yi-1)和Ti(xi-1+1,yi-1-1)点,在这两个点的选择时需要计算这两个点离理论圆弧的距离,选择离理论圆弧比较近的那个点作为圆弧构建的下一个像素点,以此类推,可以形成一段1/8段圆弧。下面来讨论一下Si点和Ti点到理论圆弧的距离,设Si点和Ti点到理论圆弧的距离分别为D(Si)、D(Ti),计算公式如下:

图1 Bresenham算法构建1/8段圆弧
因为Si点和Ti点的坐标分别为(xi-1+1,yi-1)、(xi-1+1,yi-1-1),那么Si点和Ti点分别离坐标原点即圆心的距离的平方分别为:(xi-1+1)2+yi-12、(xi-1+1)2+(yi-1-1)2,将它们与圆的半径的平方做差就可以得出Si点和Ti点离理论圆弧的距离大小了。假设Si点在圆弧的外部,Ti点在圆弧的内部。
D(Si)=[(xi-1+1)2+yi-12]-R2
D(Ti)=R2-[(xi-1+1)2+(yi-1-1)2]
令di=D(Si)-D(Ti),如果di>0,说明Ti点比Si点更靠近理论圆弧,即选择Ti点更合适;反之选择Si点。
di=D(Si)-D(Ti)=[(xi-1+1)2+yi-12]-2R2+[(xi-1+1)2+(yi-1-1)2] (1)
将i+1代入(1)式中,得:
di+1=[(xi+1)2+yi2]-2R2+[(xi+1)2+(yi-1)2]
将di+1-di,得:
di+1-di=2[(xi+1)2-(xi-1+1)2]+(yi2-yi-12)+(yi-1)2-(yi-1-1)2
如果di≥0,则选择Ti点,即:
xi=xi-1+1,yi=yi-1-1,di+1=di+4(xi-1-yi-1)+10
若di<0,则选择Si点,即:……p>
