光栅图形生成算法.ppt
《光栅图形生成算法.ppt》由会员分享,可在线阅读,更多相关《光栅图形生成算法.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Ch3 光栅图形生成算法光栅图形生成算法光栅显示器显示的图形是用一系列紧靠该图光栅显示器显示的图形是用一系列紧靠该图形路径的像素表示的。形路径的像素表示的。确定哪些像素能构成所确定哪些像素能构成所需图形的过程称为需图形的过程称为图形图形的光栅化的光栅化(也称也称光栅图光栅图形生成算法形生成算法),或称为,或称为图形的扫描转换图形的扫描转换。本章讨论内容本章讨论内容uu直线生成算法直线生成算法uu圆和圆弧的程序设计圆和圆弧的程序设计uu区域填充算法区域填充算法uu字符生成字符生成uu反走样技术反走样技术直线生成算法直线生成算法uu直线是最基本的图元,曲线由一系列直线是最基本的图元,曲线由一系列直
2、线段逼近,复杂图形可看作是由无直线段逼近,复杂图形可看作是由无数直线段组成的。直线生成质量影响数直线段组成的。直线生成质量影响计算机图形设计的质量。因此,计算机图形设计的质量。因此,光栅光栅化直线生成算法化直线生成算法必须服从四条必须服从四条原则原则:直而光滑、端点准确、亮度均匀、速直而光滑、端点准确、亮度均匀、速度快。度快。直线生成算法直线生成算法uu逐点比较法逐点比较法 绘图仪常用的一种方法。在每次画图绘图仪常用的一种方法。在每次画图过程中过程中,绘图笔每画一笔,就与规定的图绘图笔每画一笔,就与规定的图形进行比较,形进行比较,然后决定下一步的走向,然后决定下一步的走向,用步步逼近的方法画出
3、规定的图形。用步步逼近的方法画出规定的图形。X XY YOOuu假设以坐标原点作假设以坐标原点作为直线起点,各象限为直线起点,各象限中画笔走向如图所示。中画笔走向如图所示。uu逐点比较法逐点比较法一般公式一般公式:要画的线段为OA,画笔的当前的位置为M。以OM,OA的斜率的大小来计算偏差。d=tg-tg=ym/xm-ya/xa=(ym*xa-ya*xm)/xm*xa;(1)偏差计算(以第一象限为例)偏差计算(以第一象限为例)当d=0时,表示笔在OA线段的上方,应该走+x一步。只判断d的正负,不管大小,第一象限xm,xa均为正。第一象限偏差的判断公式:Fm=ym*xa-ya*xmX XY YOO
4、A(xA(xA A,y,yA A)M(xM(xMM,y,yMM)uu逐点比较法逐点比较法递推公式递推公式:上述公式要计算两次乘法上述公式要计算两次乘法,设法用前一设法用前一点的偏差来推算走步的方向以及走步后的偏差点的偏差来推算走步的方向以及走步后的偏差.(1)偏差计算)偏差计算笔的当前位置为笔的当前位置为Mi(xi,yi),此时此时Fi=yixa-yaxi.如果如果Fi=0,应走应走+x一步到一步到Mi+1,即即:xi+1=xi+1,yi+1=yi;Mi+1处的偏差处的偏差Fi+1=yi+1xa-yaxi+1=yixa-yaxi-ya=Fi-ya;如果 Fi=0 则走+x一步,此时Fi+1=F
5、i-ya;如果 Fi0 则走+y一步,此时Fi+1=Fi+xa;uu逐点比较法逐点比较法 设步距为t,直线在x,y方向的增量分别为x 和y.按上述运算方法,绘图笔从直线的起点画到终点,在x方向应走|x/t|步,在y方向应走|y/t|步.取n=|x/t|+|y/t|作为终点判断的控制数,并将此数存入计数器内.在x或y方向上每走一步计数器减1,当计数器减到零时,作图停止.(2)终点判断)终点判断直线生成算法直线生成算法uuBresenham直线生成算法直线生成算法基本原理:沿某一计长方向上,每次变化一个单位步长,另一方向上的变化量通过计算获得。这种方法在计算判别式时,计算量很小,生成的直线光滑,因
6、而应用广泛。假设直线的斜率在01之间,k=y/x,x的变化率比y的变化率大,约定每次x方向变化一个像素单位,相应y方向的变化量为0或1个像素单位。Bresenham直线生成算法直线生成算法uu已知直线起点已知直线起点(x x1 1,y,y1 1),终点终点(x x2 2,y,y2 2);uu直线上第直线上第i i个像素为个像素为P(xP(xi i,y,yi i),它是已经选定的离直线最近它是已经选定的离直线最近的当前像素。现在要决定下的当前像素。现在要决定下一个像素是一个像素是S(xS(xi i+1,y+1,yi i),),还是还是T(xT(xi i+1,y+1,yi i+1)?+1)?uu若
7、若st,s=t,s=t,则选择则选择T T。P(xi,yi)S(xi+1,yi)T(xi+1,yi+1)stQ(x,y)Q(x,y)uu计算判别式计算判别式计算判别式计算判别式:理论直线上点理论直线上点Q Q坐标为坐标为y=k(xy=k(xi i+1)+b;+1)+b;求求s s和和t:t:s=y-y s=y-yi i=k(x=k(xi i+1)+b-y+1)+b-yi i;t=(y t=(yi i+1)-y=(y+1)-y=(yi i+1)-k(x+1)-k(xi i+1)-b+1)-bstP(xi,yi)S(xi+1,yi)T(xi+1,yi+1)uu计算判别式计算判别式计算判别式计算判别
8、式:理论直线上点理论直线上点Q Q坐标为坐标为y=k(xy=k(xi i+1)+b;+1)+b;求求s s和和t:t:s=y-y s=y-yi i=k(x=k(xi i+1)+b-y+1)+b-yi i;t=(y t=(yi i+1)-y=(y+1)-y=(yi i+1)-k(x+1)-k(xi i+1)-b+1)-b则则 s-t=2k(xs-t=2k(xi+1)-2y+1)-2yi+2b-1+2b-1由于由于k=k=y yx,x,x=xx=x2-x-x1,y=yy=y2-y-y1,代入上式,得到代入上式,得到 x x (s-t)=2s-t)=2yxyxi-2-2xyxyi+(2+(2y-y-
9、x+2bx+2bx)x)(3-(3-1)1)记记d di=x x(s-t),s-t),x x0,d0,di与与(s-t)s-t)同号同号;d di值符号为选择下一值符号为选择下一个像素的判别因子。为得到个像素的判别因子。为得到d di的递推形式的递推形式,以以i+1i+1代入式代入式(3-1)(3-1)的的i i,得得 d di+1=2=2yxyxi+1-2-2xyxyi+1+(2+(2y-y-x+2bx+2bx)(3-2)x)(3-2)uu计算判别式计算判别式计算判别式计算判别式:将将(3-2)(3-2)减去减去(3-1),(3-1),且且x xi+1=x=xi+1+1,得得 d di+1=
10、d=di+2+2y-2y-2x(yx(yi+1-y-yi)(3-3)(3-3)其中其中,y yi+1-y-yi=0 0或或1 1取决于判别因子取决于判别因子d di值的符号。值的符号。如果如果d di0 0,取取S S为下一像素为下一像素,即即x xi+1=x=xi1,y1,yi+1=y=yi,有有 d di+1=d=di+2+2y (3-4)y (3-4)如果如果d di00,取取T T为下一像素为下一像素,即即x xi+1=x=xi+1,y+1,yi+1=y=yi+1,+1,有有 d di+1=d=di+2+2y-2y-2x (3-5)x (3-5)将将y y1=kx=kx1+b+b代入式
11、代入式(3-1),(3-1),得得d di初始值初始值:d d0=2=2y-y-x (3-6)x (3-6)Bresenham画线算法流程|m|m|1 1的的的的BresenhamBresenham画线算法画线算法画线算法画线算法1.1.输输输输入入入入线线线线的的的的两两两两个个个个端端端端点点点点,并并并并将将将将左左左左端端端端点点点点存存存存贮贮贮贮在在在在(x x0 0,y,y0 0)中;中;中;中;2.2.将将将将(x x0 0,y,y0 0)装入帧缓冲器,画第一个点;装入帧缓冲器,画第一个点;装入帧缓冲器,画第一个点;装入帧缓冲器,画第一个点;3.3.计计计计 算算算算 常常常常
12、 量量量量:x x、y y、2 2y y和和和和 2 2y-y-2 2x x,并得到决策参数的第一个值:并得到决策参数的第一个值:并得到决策参数的第一个值:并得到决策参数的第一个值:1.1.p p0 0=2=2yyx x;4.4.从从从从k=0k=0开开开开始始始始,在在在在沿沿沿沿线线线线的的的的每每每每个个个个x xk k处处处处,进进进进行行行行下列检测:下列检测:下列检测:下列检测:假如假如假如假如p pk k0 0,画下一个点画下一个点画下一个点画下一个点(x xk k+1+1,y yk k),且:且:且:且:p pk k+1+1=p pk k+2+2y y;否则,下一个待画点否则,
13、下一个待画点否则,下一个待画点否则,下一个待画点(x xk k+1+1,y yk k+1+1),且:且:且:且:p pk k+1+1=p pk k+2+2y-2y-2x x。5.5.k=k+1k=k+1;6.6.重复步骤重复步骤重复步骤重复步骤4 4,共,共,共,共x x次。次。次。次。像素生成过程屏幕显示过程 该算法仅涉及整数加法运算和乘该算法仅涉及整数加法运算和乘2(左移左移)操操作,运算效率高,易于硬件实现。作,运算效率高,易于硬件实现。与逐点比较法相比,生成的直线光滑。与逐点比较法相比,生成的直线光滑。若将该算法的范围扩大到整个平面,相应的若将该算法的范围扩大到整个平面,相应的d增量式
14、及其初始值增量式及其初始值,以及下一像素位置的取法以及下一像素位置的取法道理相似,请思考!道理相似,请思考!本章讨论内容本章讨论内容uu直线生成算法直线生成算法uu圆和圆弧的程序设计圆和圆弧的程序设计uu区域填充算法区域填充算法uu字符生成字符生成uu反走样技术反走样技术圆的生成算法圆的生成算法-中点圆生成算法中点圆生成算法uu以以单单位位间间隔隔取取样样并并在在每每个个步步长长中中确确定离指定圆最近的像素位置。定离指定圆最近的像素位置。uu对于给定半径对于给定半径r r和屏幕中心和屏幕中心(x xc c,y yc c),运运用用平平移移:先先给给出出计计算算中中心心在在坐坐标标原原点点(0(
15、0,0)0)圆圆的的像像素素位位置置的的算算法法,然然后后通通过过将将x xc c加加到到x x和和y yc c加加到到y y而而把把每每个个计计算算出出的位置的位置(x x,y)y)移动到其适当的屏幕位置。移动到其适当的屏幕位置。运运用用对对称称:在在第第一一像像限限中中,圆圆弧弧段段从从x=0 x=0到到x=yx=y,曲曲线线的的斜斜率率从从0 0变变化化到到-1-1,因因此此,可可以以这这八八分分圆圆上上的的正正x x方方向向取取单单位位步步长长,并并使使用用决决策策参参数数来来确确定定每每一一步步中中两两个个可可能能的的y y位位置置中中更更接接近近于于圆圆的的位位置置,而而后后在在其
16、其它它七七个个八八分分圆圆中中的的位位置置可可由对称性得到。由对称性得到。候选低像素候选低像素候选高像素候选高像素前一像素前一像素候选像素中点候选像素中点x x2 2+y+y2 2-r-r2 2=0=0中点圆生成算法:算法原理算法原理uu定义圆函数:定义圆函数:f fcirclecircle(x(x,y)=xy)=x2 2+y+y2 2r r2 2 ,圆边界上任何具有半径圆边界上任何具有半径r r的点的点(x x,y)y)满足方程满足方程f fcirclecircle(x(x,y)=0y)=0。任何点任何点(x x,y)y)的相对位置可由对圆函数符号的检测来决定:的相对位置可由对圆函数符号的检
17、测来决定:l lf fcirclecircle(x(x,y)y)0 0,(x(x,y)y)位于圆边界内位于圆边界内;l lf fcirclecircle(x(x,y)y)0 0,(x(x,y)y)位于圆边界上位于圆边界上;l lf fcirclecircle(x(x,y)y)0 0,(x(x,y)y)位于圆边界外。位于圆边界外。uu在在中中点点算算法法中中圆圆函函数数是是决决策策参参数数,并并且且可可像像在在画画线线算算法法中中一一样为这个函数设置增量运算。样为这个函数设置增量运算。uu决策参数是圆函数在这两个候选像素的中点处求值:决策参数是圆函数在这两个候选像素的中点处求值:P Pk k=f
18、circle(x=fcircle(xk+1k+1,y yk k-1/2)-1/2);根据决策参数判断:根据决策参数判断:假如假如p pk k0 0,这个中点在圆内,扫描线这个中点在圆内,扫描线y yk k上的像素上的像素(高像素高像素)接近圆边接近圆边界。界。假如假如p pk k00,中点位于圆外或在圆周边界上,选择扫描线中点位于圆外或在圆周边界上,选择扫描线y yk-1k-1的像素的像素(低低像素像素)。中点圆生成算法:决策参数决策参数uu下图示出了取样位置下图示出了取样位置x xk+1k+1处两候选像素间的中点,处两候选像素间的中点,假设假设(x xk k,y yk k)为前一像素,为前一
19、像素,需需要要决决定定下下列列哪哪个个像像素素:像像素素位位置置(x xk+1k+1,y yk k),像像素素位位置置(x xk+1k+1,y yk-1k-1)更更接接近于圆?近于圆?注意:圆在第一像限,注意:圆在第一像限,y0y0,y y方向应取减量。方向应取减量。中点圆生成算法:生成过程中点圆生成算法:生成过程1.1.输输输输入入入入圆圆圆圆半半半半径径径径r r和和和和圆圆圆圆心心心心(x xc c,y yc c),并并并并得得得得到到到到圆圆圆圆心心心心在在在在原原原原点点点点的的的的圆圆圆圆周周周周上上上上的的的的第第第第一一一一点点点点为为为为:(x x0 0,y y0 0)=(0
20、)=(0,r)r)2.2.计算决策参数的初始值为:计算决策参数的初始值为:计算决策参数的初始值为:计算决策参数的初始值为:p p0 0=5/4-r=5/4-r3.3.在每个在每个在每个在每个xkxk位置处,从位置处,从位置处,从位置处,从k=0k=0开始,完成下列检测:开始,完成下列检测:开始,完成下列检测:开始,完成下列检测:假如假如假如假如p pk k0 0,中心在中心在中心在中心在(0,0)(0,0)的圆的下一个点为的圆的下一个点为的圆的下一个点为的圆的下一个点为(x xk k+1+1,y yk k),且:且:且:且:p pk k+1+1=p pk k+2x+2xk+1k+1+1+1;否
21、则,圆的下一点是否则,圆的下一点是否则,圆的下一点是否则,圆的下一点是(x xk k+1+1,y yk k-1)-1),且:且:且:且:p pk k+1+1=p pk k+2x+2xk+1k+1+1-2y+1-2yk+1k+1。其中:其中:其中:其中:2 2x xk k+1+1=2x=2xk k+2+2,且且且且 2 2y yk k+1+1=2y=2yk k-2-2。4.4.确定在其它七个八分圆中的对称点。确定在其它七个八分圆中的对称点。确定在其它七个八分圆中的对称点。确定在其它七个八分圆中的对称点。5.5.将将将将每每每每个个个个计计计计算算算算出出出出的的的的像像像像素素素素位位位位置置置
22、置(x,y)x,y)移移移移动动动动到到到到中中中中心心心心在在在在(x xc c,y,yc c)的园路径上,并画坐标值:的园路径上,并画坐标值:的园路径上,并画坐标值:的园路径上,并画坐标值:x=x+xx=x+xc c,y=y+yy=y+yc c6.6.重复步骤重复步骤重复步骤重复步骤3 3到到到到5 5,直止,直止,直止,直止xyxy。本章讨论内容本章讨论内容uu直线生成算法直线生成算法uu圆和圆弧的程序设计圆和圆弧的程序设计uu区域填充算法区域填充算法uu字符生成字符生成uu反走样技术反走样技术区域填充区域填充uu区域区域是指一组相邻而又连通、具有相同属性的像素集。在区域内,生成某一属性
23、的实心或图案的过程称为区域填充区域填充。uu内点内点,边界和外点边界和外点:位于区域的点称为内点位于区域的点称为内点,与与内点相邻但又不属于该区域的像素组成了边界内点相邻但又不属于该区域的像素组成了边界,不不是内点和边界的像素是外点是内点和边界的像素是外点.uu光栅系统有两种区域填充算法:扫描线填充算法:扫描线填充算法:主要用于填充主要用于填充多边形、圆、椭圆以及其它简单多边形、圆、椭圆以及其它简单曲线所围成的封闭区域。曲线所围成的封闭区域。种子填充算法种子填充算法:适用于具有复杂:适用于具有复杂形状边界的区域填充。形状边界的区域填充。扫描线填充算法扫描线填充算法uu按顺序计算扫描线与多边形的
24、相交区域,用要求的颜色显示这些区间的像素,即完成填充工作。P2(5,1)P1(2,2)P3(11,3)P4(11,8)P6(2,7)P5(5,5)u例如,y=6的扫描线与多边形有四个交点,显然,第1与第2、第3与第4间的区域落在多边形内,这些区间的像素填充预期的颜色。uu填充过程填充过程,对于一,对于一条扫描线,可以分成条扫描线,可以分成四个步骤:四个步骤:P2(5,1)P1(2,2)P3(11,3)P4(11,8)P6(2,7)P5(5,5)(1)求交:求交:计算扫描线与多边形每个边的交点。(2)排序:排序:把所求出的交点按x递增的顺序排序。(3)交点配对:交点配对:第一与第二,第三与第四等
25、等,每对交点代表扫描线与多边形的一个相交区域。(4)区间填色:区间填色:把相交区域内的像素设置成多边形的颜色,把相交区域外的像素设置成背景色。解决两个特殊问题解决两个特殊问题扫描线与多边形的顶点相交,交点的取舍。P2(5,1)P1(2,2)P3(11,3)P4(11,8)P6(2,7)P5(5,5)多边形边界上的像素的取舍问题。2 24 46 68 81 1个交点个交点0 0个交点,个交点,不填充不填充 2 2个交点,个交点,填充填充解决两个特殊问题解决两个特殊问题扫描线与多边形的顶点相交,交点的取舍。P2(5,1)P1(2,2)P3(11,3)P4(11,8)P6(2,7)P5(5,5)多边
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 光栅 图形 生成 算法
限制150内