《计算机图形学chap5-基本图形生成算法ppt课件.ppt》由会员分享,可在线阅读,更多相关《计算机图形学chap5-基本图形生成算法ppt课件.ppt(158页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统计算机图形学基础计算机图形学基础华东理工大学计算机系华东理工大学计算机系 谢晓玲谢晓玲篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统p如如何何在在指指定定的的输输出出设设备备上上根根据据坐坐标标描描述述构构造造基基
2、本本二二维维几几何何图图形形(点点、直直线线、圆圆、椭椭圆圆、多多边边形域、字符串及其相关属性等)。形域、字符串及其相关属性等)。第五章第五章 基本图形生成算法基本图形生成算法2篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统p图形生成的概念图形生成的概念p直线段的扫描转换直线段的扫描转换p圆的扫描转换圆的扫描转换p多边形的扫描转换与区域填充多边形的扫描转换与区域填充p属性处理属性处理p反走样技术反走样技术p在在OpenGL中绘
3、制图形中绘制图形第五章第五章 基本图形生成算法基本图形生成算法3篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统o图图形形的的生生成成:是是在在指指定定的的输输出出设设备备上上,根根据据坐坐标标描描述构造二维几何图形。述构造二维几何图形。o图图形形的的扫扫描描转转换换:在在光光栅栅显显示示器器等等数数字字设设备备上上确确定定一一个个最最佳佳逼逼近近于于图图形形的的象象素集的过程。素集的过程。图图5.1 用象素点集逼近直线用象素点
4、集逼近直线图形生成的概念图形生成的概念4篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统5.1 直线的扫描转换直线的扫描转换o线画图元的扫描转换线画图元的扫描转换计算出落在线段上或充分靠近它的一串像素,并以此计算出落在线段上或充分靠近它的一串像素,并以此像素集近似代替连续直线在屏幕上显示的过程。像素集近似代替连续直线在屏幕上显示的过程。o直线的绘制要求直线的绘制要求 (1 1)直线要直;)直线要直;(2 2)直线的端点要准确,无
5、定向性无断裂;)直线的端点要准确,无定向性无断裂;(3 3)直线的亮度、色泽要均匀;)直线的亮度、色泽要均匀;(4 4)画线的速度要快;)画线的速度要快;(5 5)具有不同的色泽、亮度、线型等。)具有不同的色泽、亮度、线型等。5篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统直线的扫描转换直线的扫描转换o解解决决的的问问题题:给给定定直直线线两两端端点点P0(x0,y0)和和P1(x1,y1),画出该直线。画出该直线。o数值微分
6、法(数值微分法(Digital Differential Analyzer,DDA)o中点中点Bresenhan算法算法o改进的改进的Bresenhan算法算法6篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统o数值微分法数值微分法数值微分法即数值微分法即DDA(Digital Differential Analyzer)DDA(Digital Differential Analyzer)算法,是根据直线的微分方程来计算算法,是
7、根据直线的微分方程来计算x x或或y y生成直线生成直线的扫描转换算法。的扫描转换算法。在一个坐标轴上以单位间隔对线段取在一个坐标轴上以单位间隔对线段取样样,以决定另一个坐标轴方向上最靠近理想线段的整数以决定另一个坐标轴方向上最靠近理想线段的整数值。值。数值微分法的本质,是用数值方法解微分方程,通过数值微分法的本质,是用数值方法解微分方程,通过同时对同时对x x和和y y各增加一个小增量,计算下一步的各增加一个小增量,计算下一步的x x、y y值。值。数值微分法数值微分法(DDA法法)篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮
8、球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统数值微分法数值微分法(DDA法法)直线的微分方程:直线的微分方程:=1/max(|x|,|y|)图图5.2 DDA算法原理算法原理8omax(|x|,|y|)=|x|,即即|k|1的情况:的情况:p max(|x|,|y|)=|y|,此时此时|k|1:篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统o数值微分法数值微分法步骤
9、:步骤:给定:两个端点给定:两个端点P0(x0,y0)和和P1(x1,y1),则:则:dx=(x1-x0);dy=(y1-y0);根据根据|dx|、|dy|,哪个大,哪个为步长参数:,哪个大,哪个为步长参数:当当|dx|dy|,即,即|m|1时,时,若若x0 x1,即即直线从右到左,则直线从右到左,则 x=-1,y=-m当当|dx|dy|,即,即|m|1时,时,若若x0 x1,即即直线从右到左,则直线从右到左,则 y=-1,x=-1/m数值微分法数值微分法(DDA法法)void DDA_Line(int x0,int y0,int x1,int y1,int color)int i;float
10、 dx,dy,length,x,y;if(fabs(x1-x0)=fabs(y1-y0)length=fabs(x1-x0);elselength=fabs(y1-y0);dx=(x1-x0)/length;dy=(y1-y0)/length;i=1;x=x0;y=y0;while(i=length)PutPixel(int(x+0.5),int(y+0.5),color);x=x+dx;y=y+dy;i+;x int(y+0.5)y+0.50 0 0+0.51 0 0.4+0.52 1 0.8+0.53 1 1.2+0.54 2 1.6+0.55 2 2.0+0.5直线段的DDA扫描转换 举
11、例:线段P0(0,0)和P1(5,2)的DDA方法扫描转换。篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统o增量算法:增量算法:加法加法+取整取整o直观、易实现直观、易实现ox与与dx、y与与dy用用浮浮点点数数表表示示,每每一一步步要要进进行行四舍五入后取整,不利于硬件实现四舍五入后取整,不利于硬件实现。数值微分法数值微分法(DDA法法)特点特点12篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的
12、计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统中点中点Bresenham算法算法p算法原理:根据直线的斜率确定或选择变量在算法原理:根据直线的斜率确定或选择变量在x或或y方向上每次递增一个单位,而另一方向的方向上每次递增一个单位,而另一方向的增量为增量为1或或0,它取决于实际直线与相邻象素点,它取决于实际直线与相邻象素点的距离,这一距离称为的距离,这一距离称为误差项误差项。13篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动
13、队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统中点中点Bresenham算法算法o直线的方程直线的方程图图5.4 直线将平面分为三个区域直线将平面分为三个区域14假假定定0k1,即即0 y/x 1,x是是最最大大位位移移方方向向,则则每每次次x加加1,若M在Q下放,y加加1(取Pu);若M在Q上放,取y加加0(取Pd)。图图5.5 Brensemham算法生成直线的原理算法生成直线的原理判别式:判别式:则有:则有:图图5.5 Brensemham算法生成直线的原理算法生成直线的原理d的意义的意义:d=F(xM,yM)=F(xi+1,yi+0.5)=y
14、i+0.5-k(xi+1)-b =yi+0.5-k(xi+1)+b =yM-yQ 这里:这里:yQ=k(xi+1)+b、yM=yi+0.5 图图5.5 Brensemham算法生成直线的原理算法生成直线的原理误差项的递推(误差项的递推(d10)图图5.6 误差项递推误差项递推(a)误差项的递推(误差项的递推(d10)图图5.6 误差项递推误差项递推(b)篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统初始值初始值d的计算的计算中
15、点中点Bresenham算法算法图图5.9 计算初值计算初值20篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统改进:用改进:用2dx代替代替d,令令D2dx 则:则:中点中点Bresenham算法算法改进改进yDikdixxdiDi+1DdyxDiyxxdikdixxdiDi+1DdyxkxxdDD-=-D=D=D-D+=D-D+D=-+D=D=D-D=-D=D=2)(220,则取(xi+1,yi)022222)1(220,则
16、取(xi+1,yi+1)02)5.0(220021篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统o输入直线的两端点输入直线的两端点P0(x0,y0)和和P1(x1,y1)。o计计 算算 初初 始始 值值 x、y、D=x-2y、x=x0、y=y0。o绘绘制制点点(x,y)。判判断断D的的符符号号。若若D0)then e=e-1;y+误差项的计算误差项的计算d初初=0,每走一步:每走一步:d=d+k if(d0.5)then d=
17、d-1;y+;仍然存在小数和除法计算仍然存在小数和除法计算k k。改进改进2:用:用E=2ex来替换来替换ee初初=-0.5每走一步有每走一步有e=e+kif(e0)then e=e-1;y+;E初初=-0.5*2x=-x每走一步有每走一步有E=(e+k)*2x=E+2y if(e0)then E=(e-1)*2x=E-2x;y+;篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统1.输入直线的两端点输入直线的两端点P0(x0,y
18、0)和和P1(x1,y1)。2.计算初始值计算初始值x、y、e=-x、x=x0、y=y0。3.绘制点绘制点(x,y)。4.e更更新新为为e+2y,判判断断e的的符符号号。若若e0,则则(x,y)更更新新为为(x+1,y+1),同同时时将将e更更新新为为e-2x;否则否则(x,y)更新为更新为(x+1,y)。5.当直线没有画完时,重复步骤当直线没有画完时,重复步骤3和和4。否则结束。否则结束。改进的改进的Bresenham算法算法算法步骤算法步骤30篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得
19、分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统例:已知:例:已知:P P0 0(0,0)P0,0)P1 1(5,2)5,2)dydy=y=y1 1-y-y0 0=2,d=2,dx x=x=x1 1-x-x0 0=5=5e e0 0=-dx=-5,=-dx=-5,令:令:2d2dy y=4,=4,2dx2dx=10=10i i(x(xi i,y,yi i)e)ei i e+2dy (x e+2dy (xi+1i+1,y,yi+1i+1)e-2dx e-2dx0 0(0,0)-5 -1 (1,0)(0,0)-5 -1 (1,0)1 1(1,0)-1 3 (2,1)(1,0)-
20、1 3 (2,1)-7 -7 2 2(2,1)-7 -3 (3,1)(2,1)-7 -3 (3,1)3 3(3,1)-3 1 (4,2)(3,1)-3 1 (4,2)-9 -94 4(4,2)-9 -5 (5,2)(4,2)-9 -5 (5,2)0 1 2 3 4 5321改进的改进的Bresenham算法算法篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统5.2 圆的扫描转换圆的扫描转换o为为了了方方便便起起见见,只只考考虑虑
21、圆圆心心中中心心在在原原点点、半半径径为整数为整数R的圆的圆x2+y2=R2。32图图5.9 八分法画圆八分法画圆Void cirput(int x0,int y0,int x,int y,int color)PutPixel(x0+x,y0+y,color);PutPixel(x0+y,y0+x,color);PutPixel(x0+y,y0-x,color);PutPixel(x0+x,y0-y,color);PutPixel(x0-x,y0-y,color);PutPixel(x0-y,y0-x,color);PutPixel(x0-y,y0+x,color);PutPixel(x0-x
22、,y0+y,color);(y,x)(-y,x)(-x,y)(-x,-y)(-y,-x)(y,-x)(x,-y)(x,y)(x,y)yy=-xy=x篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统解决问题:解决问题:只要扫描转换八分之一圆弧(从(0,R)顺时针到(R/2,R/2)),就可以求出整个圆弧的象素集。圆的扫描转换圆的扫描转换图图5.10 1/8圆弧圆弧(0,R)(R/2,R/2)34篮球比赛是根据运动队在规定的比赛时间
23、里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统圆的扫描转换圆的扫描转换o简单方程生成圆弧简单方程生成圆弧o中点中点Bresenham算法算法35篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统简单方程产生圆弧简单方程产生圆弧算法原理算法原理:利用其函数方程,直接离散计算。:利用其函数方程,直接离散
24、计算。圆的函数方程为:圆的函数方程为:36篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统圆的极坐标方程圆的极坐标方程为:为:简单方程产生圆弧简单方程产生圆弧37篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统构造函数构造函数F(x,y)=x2+y2-R2。o对于
25、圆上的点,有对于圆上的点,有F(x,y)=0;o对于圆外的点,对于圆外的点,F(x,y)0;o而对于圆内的点,而对于圆内的点,F(x,y)0。给定圆心在原点,半径为整数给定圆心在原点,半径为整数R的圆,其方程为的圆,其方程为中点中点Bresenham画圆画圆38图图5.11 中点中点Bresenham画圆的原理画圆的原理当F(M)0,M在圆外,取Pd(xi+1,yi-1);当F(M)=0,M在圆上,取Pu或Pd;篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的
26、计时计分系统是一种得分类型的系统o当当d0时,下一点取时,下一点取Pu(xi+1,yi);o当当d0时,下一点取时,下一点取Pd(xi+1,yi-1)。构造判别式:构造判别式:中点中点Bresenham画圆画圆40误差项的递推(误差项的递推(d10)图图5.12 d0的情况的情况误差项的递推(误差项的递推(d10)图图5.15 d0的情况的情况5)(25 R2)(2)5.0()1(1)5.0(2)5.0(32)1()15.0()11(1222222222+-+=+-+-+=-+-+=-+=iiiiiiiiiiiiyxdyxyxRyyxxRyxd篮球比赛是根据运动队在规定的比赛时间里得分多少来决
27、定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统判别式的初始值:判别式的初始值:有浮点运算有浮点运算中点中点Bresenham画圆画圆43改进:用改进:用d-0.25代替代替d,则:,则:d0=1-R当当d di-0.25-0.25 d di i000 di+1=F(xi+2,yi-1.5)=(xi+2)2+(yi-1.5)2-R2 =(xi+1)2+(yi-0.5)2-R2+2xi+3+(-2yi+2)=di+2(xi-yi)+5篮球比赛是根据运动队在规定的比赛时间里得分多少
28、来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统1.输入圆的半径输入圆的半径R。2.计算初始值计算初始值d=1-R、x=0、y=R。3.绘制点绘制点(x,y)及其在八分圆中的另外七个对称点。及其在八分圆中的另外七个对称点。4.判判断断d的的符符号号。若若d0,则则先先将将d更更新新为为d+2x+3,再再将将(x,y)更更新新为为(x+1,y);否否则则先先将将d更更新新为为d+2(x-y)+5,再将再将(x,y)更新为更新为(x+1,y-1)。5.当当xy时,重复步骤时,重
29、复步骤3和和4。否则结束。否则结束。程序演示程序演示中点中点Bresenham画圆画圆算法步骤算法步骤45篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统设圆半径设圆半径R=10R=10,初始点,初始点(0,10)(0,10),d d0 0=1-R=-9=1-R=-9i id di i下一个点下一个点 d di+1i+10 -9 (1,10)=0 -9 (1,10)=d di i+2X+2Xi+1i+1+1=-6+1=-61 1
30、-6-6 (2,10)(2,10)=d di i+2X+2Xi+1i+1+1=-1+1=-12 2-1(3,10)-1(3,10)=d di i+2X+2Xi+1i+1+1=6+1=63 36 (4,9)6 (4,9)=d di i+2X+2Xi+1i+1-2Y-2Yi-1i-1+1=-3+1=-34 4-3(5,9)-3(5,9)=d di i+2X+2Xi+1i+1+1=8+1=85 58 8 (6,8)(6,8)=d di i+2X+2Xi+1i+1-2Y-2Yi-1i-1+1=5+1=56 65 (7,7)5 (7,7)中点中点Bresenham画圆画圆篮球比赛是根据运动队在规定的比赛
31、时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统5.4 多边形的扫描转换与区域填充多边形的扫描转换与区域填充o多多边边形形的的扫扫描描转转换换主主要要是是通通过过确确定定穿穿越越区区域域的的扫描线的覆盖区间来填充。扫描线的覆盖区间来填充。o区区域域填填充充是是从从给给定定的的位位置置开开始始涂涂描描直直到到指指定定的的边界条件为止。边界条件为止。47篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球
32、比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统多边形的扫描转换与区域填充多边形的扫描转换与区域填充o多边形的扫描转换多边形的扫描转换o边缘填充算法边缘填充算法o区域填充区域填充o相关概念相关概念48篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统多边形的扫描转换多边形的扫描转换o顶顶点点表表示示用用多多边边形形的的顶顶点点序序列列来来刻刻划划多多边边形形,几何意义强,但不
33、适合着色。几何意义强,但不适合着色。o点点阵阵表表示示是是用用位位于于多多边边形形内内的的象象素素的的集集合合来来刻刻划多边形,没有几何意义,但适合着色划多边形,没有几何意义,但适合着色o扫扫描描转转换换多多边边形形:从从多多边边形形的的顶顶点点信信息息出出发发,求求出出位位于于其其内内部部的的各各个个象象素素,并并将将其其颜颜色色值值写写入帧缓存中相应单元的过程。入帧缓存中相应单元的过程。多边形扫描转换多边形扫描转换顶点表示顶点表示 点阵表示点阵表示49篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛
34、时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统多边形的扫描转换多边形的扫描转换oX扫描线算法扫描线算法o改进的有效边表算法改进的有效边表算法50篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统o基基本本思思想想:按按扫扫描描线线顺顺序序,计计算算扫扫描描线线与与多多边边形形的的相相交交区区间间,再再用用要要求求的的颜颜色色显显示示这些区间的所有象素。这些区间的所有象素。X扫描线算法扫描线算法原理原理
35、图图5.23 x-扫描线算法填充多边形扫描线算法填充多边形51篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统1.确确定定多多边边形形所所占占有有的的最最大大扫扫描描线线数数,得得到到多多边边形形顶点的最小和最大顶点的最小和最大y值(值(ymin和和ymax)。)。2.从从y=ymin到到y=ymax,每次用一条扫描线进行填充。每次用一条扫描线进行填充。3.对一条扫描线填充的过程可分为四个步骤:对一条扫描线填充的过程可分为四个步
36、骤:o求交:计算扫描线与多边形所有边的交点;求交:计算扫描线与多边形所有边的交点;o排序:按排序:按x轴排序所有交点;轴排序所有交点;o交交点点配配对对:每每对对交交点点代代表表扫扫描描线线与与多多边边形形的的一一个相交区域;个相交区域;o区间填色:根据相交区域填色。区间填色:根据相交区域填色。X扫描线算法扫描线算法算法步骤算法步骤52篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统图 多边形域的填充 求交:求交:扫描线扫描线6
37、 6与多边形的边界线交于与多边形的边界线交于A A、B B、C C、D D。得到的各交点的横坐标分别为得到的各交点的横坐标分别为2 2、4 4、8 8、1111;排序:排序:按递增排序:按递增排序:2 2、4 4、8 8、1111;配对:配对:相交区间为相交区间为2,42,4、8,118,11;填色:填色:这两个区间的像素置成多边形色这两个区间的像素置成多边形色,把相交区间外的像素置成背景色。把相交区间外的像素置成背景色。X扫描线算法扫描线算法算法步骤算法步骤篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的
38、比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统p交点的取整规则:使生成的像素全部位于多边交点的取整规则:使生成的像素全部位于多边形之内。(用于直线等图元扫描转换的四舍五形之内。(用于直线等图元扫描转换的四舍五入原则可能导致部分像素位于多边形之外,从入原则可能导致部分像素位于多边形之外,从而不可用)。而不可用)。p假定非水平边与扫描线假定非水平边与扫描线y=e相交,交点的横坐标相交,交点的横坐标为为x,规则如下:,规则如下:X扫描线算法扫描线算法取整规则取整规则54p 规则规则1:如:如X为小数,即交点落于扫描线上两个相邻为小数,即交点落于扫描线上两个相邻像素之
39、间时:像素之间时:n交点位于左边界之上,向右取整;交点位于左边界之上,向右取整;n交点位于右边界之上,向左取整;交点位于右边界之上,向左取整;图图 取整规则取整规则1p 规则规则2:如:如X为整数,即交点落于扫描线上某像素上为整数,即交点落于扫描线上某像素上时,按照时,按照“左闭右开左闭右开”原则处理交点:原则处理交点:n交点处于左边界之上,交点不变;交点处于左边界之上,交点不变;n交点交点处处于右边界之上,于右边界之上,交点的交点的x坐标减坐标减1;图图 取整规则取整规则2篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根
40、据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统 当当扫扫描描线线与与多多边边形形顶顶点点相相交交时时,交交点点的的取取舍舍,保保证证每每一一条条扫扫描描线线与与多多边边形形的的交交点点个个数数为为偶偶数数,使使交交点正确配对。点正确配对。o规则规则3:当扫描线与多边形的顶点相交时,当扫描线与多边形的顶点相交时,n若共享顶点的两条边分别落在若共享顶点的两条边分别落在扫描线的两边,交点只算一个;扫描线的两边,交点只算一个;n若共享顶点的两条边在扫描线若共享顶点的两条边在扫描线的同一边,这时交点作为零个或的同一边,这时交点作为零个或两个。两个。图图
41、取整规则取整规则3X扫描线算法扫描线算法取整规则取整规则xy213 4 5 6 7 8 9111234567891011121012填充过程实例填充过程实例篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统实际处理实际处理:只要检查:只要检查顶点的两条边的另外顶点的两条边的另外两个端点的两个端点的Y值,按值,按这二个这二个y值中大于交值中大于交点点y值的个数是值的个数是0、1、2来决定交点个数来决定交点个数是是0个、个、1个、还是
42、个、还是2个。个。X扫描线算法扫描线算法取整规则取整规则图图5.25 与扫描线相交的多边形顶点的交点数与扫描线相交的多边形顶点的交点数58篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统改进的有效边表算法(改进的有效边表算法(Y连贯性算法)连贯性算法)x-x-扫扫描描线线算算法法需需要要与与多多边边形形所所有边求交,效率低下。有边求交,效率低下。改进原理:改进原理:p处处理理一一条条扫扫描描线线时时,仅仅对对有有效效边求交。边求
43、交。p利用扫描线的连贯性。利用扫描线的连贯性。p利用多边形边的连贯性。利用多边形边的连贯性。当扫描线当扫描线Y Yi i与某一条边的交点与某一条边的交点坐标为坐标为X Xi i,那么下一条扫描线,那么下一条扫描线Y Yi i+1+1与该边的交点与该边的交点X Xi+1i+1的计算,的计算,只需加上一个增量即可:只需加上一个增量即可:X Xi+1i+1=X=Xi i+1/k+1/k图图5.26 与多边形边界相交的两条与多边形边界相交的两条连续扫描线交点的相关性连续扫描线交点的相关性(x(xi i,y,yi i)(x(xi i+1/k,y+1/k,yi i+1)+1)11/k59篮球比赛是根据运动
44、队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统o边边表表(Edge Table,ET):多多边边形形的的所所有有边边放放在在一个表中。一个表中。o有有效效边边(Active Edge):与与当当前前扫扫描描线线相相交交的的多边形的边,也称为活性边。多边形的边,也称为活性边。o有有效效边边表表(Active Edge Table,AET):把把有有效效边边按按与与扫扫描描线线交交点点x坐坐标标递递增增的的顺顺序序存存放放在在一一个个链链表表中中,
45、此此链链表表称称为为有有效效边边表表。有有效效边边表表的的每每个结点:个结点:x ymax 1/k next改进的有效边表算法(改进的有效边表算法(Y连贯性算法)连贯性算法)60篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统n有效边链表有效边链表结点结点的数据结构的数据结构x x:当前扫描线与边的交点坐标:当前扫描线与边的交点坐标Y Ymaxmax:该边所交的最高扫描线号:该边所交的最高扫描线号Y Ymaxmax 1/k 1/
46、k:从当前扫描线到下一条扫描线间:从当前扫描线到下一条扫描线间x x的增量的增量n边的连贯性,扫描线的联贯性;边的连贯性,扫描线的联贯性;只只需需对对当当前前扫扫描描线线的的有有效效边边表表稍稍作作修修改改,就就可可以得到下一条扫描线的有效边表。以得到下一条扫描线的有效边表。改进的有效边表算法(改进的有效边表算法(Y连贯性算法)连贯性算法)篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统首首先先构构造造一一个个纵纵向向链链表表,
47、链链表表的的长长度度为为多多边边形形所所占占有有的的最最大大扫扫描描线线数数,链链表表的的每每个个结结点点,称称为为一个桶,则对应多边形覆盖的每一条扫描线。一个桶,则对应多边形覆盖的每一条扫描线。将将每每条条边边的的信信息息链链入入与与该该边边最最小小y坐坐标标(ymin)相相对对应应的的桶桶处处。也也就就是是说说,若若某某边边的的较较低低端端点点为为ymin,则该边就放在相应的扫描线桶中。则该边就放在相应的扫描线桶中。改进的有效边表算法改进的有效边表算法构造边表构造边表62篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根
48、据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统每每条条边边的的数数据据形形成成一一个个结结点点,内内容容包包括括:该该扫扫描描线线与与该该边边的的初初始始交交点点x(即即较较低低端端点点的的x值值),1/k,以及该边的最大以及该边的最大y值值ymax。x|ymin ymax 1/k NEXT同同一一桶桶中中若若干干条条边边按按X|ymin由由小小到到大大排排序序,若若X|ymax 相等,则按照相等,则按照1/k由小到大排序。由小到大排序。改进的有效边表算法改进的有效边表算法构造边表构造边表63解决顶点交点计为解决顶点交点计为1 1时的情形:时的
49、情形:图图5.28 将多边形的某些边缩短以分离那些应计为将多边形的某些边缩短以分离那些应计为1个交点的顶点个交点的顶点下闭上开:下闭上开:检测是否存在某边的检测是否存在某边的ymax等于另一边的等于另一边的ymin,假,假如有,则将如有,则将ymax的边缩短(的边缩短(ymax=ymax-1)如图如图5.28(b),以保证顶点交点计数为以保证顶点交点计数为1。图图5.27 多边形多边形P0P1P2P3P4P5P6图图5.27 多边形多边形P0P1P2P3P4P5P6篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统篮球比赛是根据运动队在
50、规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统初始化:构造边表,初始化:构造边表,AET表置空;表置空;将第一个不空的将第一个不空的ET表中的边与表中的边与AET表合并;表合并;由由AET表表中中取取出出交交点点对对进进行行填填充充。填填充充之之后后删删除除y=ymax的边;的边;yi+1=yi+1,根根据据xi+1=xi+1/k计计算算并并修修改改AET表表,同同时时合合并并ET表表中中y=yi+1桶桶中中的的边边,按按次次序序插插入入到到AET表表中,形成新的中,形成新的AET表;表;AET表不为空则转表不为空则转,否则结束。,否则结束。改进的有效边