22圆弧的扫描转换算法 221圆的特征 圆被定义为到给定中心位置(x,y)距离为r的点集。圆心位于原点的圆有四条对称轴x=0,y=0,x=y 和x=-y。若已知圆弧上一点(x,y),可以得到其关于四条对称轴的其它7个点,这种性质称为八对称性 因此,只要扫描转换八分之一圆弧,就可以求出整个圆弧的象素集 显示圆弧上的八个对称点的算法 void CirclePoints(int x, int y, int color) i drawpixel(x,y, color); drawpixel(y, x, color) drawpixel(-x,y, color); drawpixel(y, x, color); drawpixel(, -y, color); drawpixel(-y, x, color) drawpixel(-x,-y, color); drawpixel(-y, x,color) 222中点画圆法 构造圆函数F(xy)=x2+y2-R2。对于圆上的点,(xy)=0:对于圆外的点(xy)>0 对于圆内的点F(xy)(0。与中点画线法一样,构造判别式 d=F(MO=F(x,+1y,-05=(x,+1)2+(y,-05)2-R 若d<0则应取P1为下一象素,而且再下一象素的判别式为 y2-05)-(x,+2)2+(y,-052-R2-d+2x d≥0若则应取P2为下一象素,而且下一象素的判别式为 F(xy+2y-1.5)=(x,+2)2+( +2(x-y) 我们这里讨论的是按顺时针方向生成第二个八分圆。则第一个象素是(0R),判别式d的初始值为 d0=F(,R-0.5)=1.25-R P=(xph yp 图2.2.1当前象素与下一象素的候选者 MidPointcircle(int r int color) fint x,y: float d X=0:y=r;d=1.25r; circlepoints(x,y, color); fd<o)d+=2*x+3 else (d=2 (x-y)+5: y-1 circlepoints(x, y, color); 为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即 仅用整数实现中点画圆法 23多边形的扫描转换与区域填充 在计算机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示。顶点表示是用多边形的顶点 序列来表示多边形。这种表示直观、几何意义强、占内存少,易于进行几何变换,但由于它没有明确指出 哪些象素在多边形内故不能直接用于面着色。点阵表示是用位于多边形内的象素集合来刻画多边形。这种 表示丢失了许多几何信息,但便于帧缓冲器表示图形,是面着色所需要的图形表示形式。光栅图形的一个 基本问题是把多边形的顶点表示转换为点阵表示。这种转换称为多边形的扫描转换 计算机图形学第二章第21页共27页计算机图形学 第二章 第 21 页 共 27 页 2.2 圆弧的扫描转换算法 2.2.1 圆的特征 圆被定义为到给定中心位置(xc,yc)距离为 r 的点集。圆心位于原点的圆有四条对称轴 x=0,y=0,x=y 和 x=-y。若已知圆弧上一点(x,y),可以得到其关于四条对称轴的其它 7 个点,这种性质称为八对称性。 因此,只要扫描转换八分之一圆弧,就可以求出整个圆弧的象素集。 显示圆弧上的八个对称点的算法: void CirclePoints(int x,int y,int color) { drawpixel(x,y,color); drawpixel(y,x,color); drawpixel(-x,y,color); drawpixel(y,-x,color); drawpixel(x,-y,color); drawpixel(-y,x,color); drawpixel(-x,-y,color); drawpixel(-y,-x,color); } 2.2.2 中点画圆法 构造圆函数 。 对于圆上的点, ;对于圆外的点 ; 对于圆内的点 。与中点画线法一样,构造判别式 若 则应取 P1 为下一象素,而且再下一象素的判别式为 若 则应取 P2 为下一象素,而且下一象素的判别式为 我们这里讨论的是按顺时针方向生成第二个八分圆。则第一个象素是(0,R),判别式 d 的初始值为 图 2.2.1 当前象素与下一象素的候选者 MidPointCircle(int r int color) { int x,y; float d; x=0; y=r; d=1.25-r; circlepoints (x,y,color); while(x<=y) { if(d<0) d+=2*x+3; else { d+=2*(x-y)+5; y--;} x++; circlepoints (x,y,color); } } 为了进一步提高算法的效率,可以将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即 仅用整数实现中点画圆法。 2.3 多边形的扫描转换与区域填充 在计算机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示。顶点表示是用多边形的顶点 序列来表示多边形。这种表示直观、几何意义强、占内存少,易于进行几何变换,但由于它没有明确指出 哪些象素在多边形内故不能直接用于面着色。点阵表示是用位于多边形内的象素集合来刻画多边形。这种 表示丢失了许多几何信息,但便于帧缓冲器表示图形,是面着色所需要的图形表示形式。光栅图形的一个 基本问题是把多边形的顶点表示转换为点阵表示。这种转换称为多边形的扫描转换