基本图形生成算法.ppt
《基本图形生成算法.ppt》由会员分享,可在线阅读,更多相关《基本图形生成算法.ppt(142页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 直线、圆、椭圆生成算法直线、圆、椭圆生成算法图形的扫描转换(光栅化):确定一个像素集合,用于显示一个图形的过程。步骤如下:1、确定有关像素2、用图形的颜色或其它属性,对像素进行写操作。对一维图形,不考虑线宽,则用一个像素宽的直线来显示图形。二维图形的光栅化,即区域的填充:确定像素集,填色或图案。任何图形的光栅化,必须显示在一个窗口内,否则不予显示。即确定一个图形的哪些部分在窗口内,哪些在窗口外,即裁剪。计算机图形学计算机图形学图形显示前需要:扫描转换图形显示前需要:扫描转换+裁剪裁剪裁剪裁剪-扫描转换:最常用,节约计算时间。扫描转换:最常用,节约计算时间。扫描转换扫描转换-裁剪:
2、算法简单;裁剪:算法简单;计算机图形学计算机图形学本章内容本章内容扫描转换直线段 DDA算法 中点画线法 Bresenham画线算法圆弧、椭圆弧扫描转换 中点算法 计算机图形学计算机图形学直线段的扫描转换算法直线段的扫描转换算法l直线的扫描转换:确定最佳逼近于该直线确定最佳逼近于该直线的一组象素,并且按扫描线顺序,对这的一组象素,并且按扫描线顺序,对这些象素进行写操作。些象素进行写操作。l三个常用算法:三个常用算法:数值微分法(数值微分法(DDA)中点画线法中点画线法Bresenham算法。算法。计算机图形学计算机图形学数值微分法()数值微分法()假定直线的起点、终点分别为:(假定直线的起点、
3、终点分别为:(x0,y0),(x1,y1),且都为整数。,且都为整数。(X i+1,Yi+k)(X i,Int(Yi+0.5)(X i,Yi)栅格交点表示象素点位置。计算机图形学计算机图形学数值微分数值微分(DDA)法法l基本思想基本思想已知过端点已知过端点P0(x0,y0),P1(x1,y1)的直线段的直线段Ly=kx+b直线斜率为直线斜率为这种方法直观,但效率太低,因为每一步需要一次浮点乘法这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。和一次舍入运算。计算机图形学计算机图形学数值微分数值微分(DDA)法法计算计算yi+1i+1=kxi+1i+1+b =kxi i+b+
4、k x =yi i+k x 当当 x=1;yi+1 i+1=yi i+k l即:当即:当x每递增每递增1,y递增递增k(即直线斜率即直线斜率);l注意上述分析的算法仅适用于注意上述分析的算法仅适用于k 1的情形。的情形。在这种情况下,在这种情况下,x每增加每增加1,y最多增加最多增加1。l当当 k 1时,必须把时,必须把x,y地位互换地位互换计算机图形学计算机图形学数值微分数值微分(DDA)法法l增量算法:在一个迭代算法中,如果每增量算法:在一个迭代算法中,如果每一步的一步的x、y值是用前一步的值加上一个值是用前一步的值加上一个增量来获得,则称为增量算法。增量来获得,则称为增量算法。lDDA算
5、法就是一个增量算法。算法就是一个增量算法。计算机图形学计算机图形学数值微分数值微分(DDA)法法void DDALine(int x0 0,int y0 0,int x1 1,int y1 1,int color)int x;float dx,dy,y,k;dx x,=x1 1-x0 0,dy y=y1 1-y0 0;k=dy/dx,y=y0 0;for(x=x0 0;x x1 1,x+)drawpixel(x,int(y+0.5),color);y=y+k;计算机图形学计算机图形学数值微分数值微分(DDA)法法l例:画直线段例:画直线段P0(0,0)-P1(5,2)x int(y+0.5)y
6、+0.5000+0.5100.4+0.5210.8+0.5311.2+0.5421.6+0.5522.0+0.5计算机图形学计算机图形学数值微分数值微分(DDA)法法l缺点:缺点:在此算法中,在此算法中,y、k必须是必须是float,且每,且每一步都必须对一步都必须对y进行舍入取整,不利于硬件实进行舍入取整,不利于硬件实现。现。计算机图形学计算机图形学中点画线法中点画线法l原理:原理:假定直线斜率0K P2 2离直线更近更近离直线更近更近-取取P2 2。M在在Q的上方的上方-P1 1离直线更近更近离直线更近更近-取取P1 1M与与Q重合,重合,P1 1、P2 2任取一点。任取一点。问题:如何判
7、断问题:如何判断M与与Q点的关系?点的关系?计算机图形学计算机图形学中点画线法中点画线法假设直线方程为:假设直线方程为:ax+by+c=0其中其中a=y0 0-y1 1,b=x1 1-x0 0,c=x0 0y1 1-x1 1y0 0由常识知:由常识知:欲欲判判断断M点点是是在在Q点点上上方方还还是是在在Q点点下下方方,只需把只需把M代入代入F(x,y),并检查它的符号。并检查它的符号。计算机图形学计算机图形学中点画线法中点画线法构造判别式:构造判别式:d=F(M)=F(xp p+1,yp p+0.5)=a(xp p+1)+b(yp p+0.5)+c当当d0,M在直线在直线(Q点点)上上方,取右
8、方方,取右方P1 1;当当d=0,选,选P1 1或或P2 2均可,均可,约定取约定取P1 1;能否采用增量算法呢?能否采用增量算法呢?计算机图形学计算机图形学中点画线法中点画线法若若d 0-M在直线上方在直线上方-取取P1;此时再下一个象素的判别式为此时再下一个象素的判别式为 d1 1=F(xp p+2,yp p+0.5)=a(xp p+2)+b(yp p+0.5)+c =a(xp p+1)+b(yp p+0.5)+c+a=d+a;增量为增量为a计算机图形学计算机图形学中点画线法中点画线法l若若dM在直线下方在直线下方-取取P2;l此时再下一个象素的判别式为此时再下一个象素的判别式为 d2 2
9、=F(xp p+2,yp p+1.5)=a(xp p+2)+b(yp p+1.5)+c =a(xp p+1)+b(yp p+0.5)+c+a+b=d+a+b;增量为增量为ab计算机图形学计算机图形学中点画线法中点画线法l画线从画线从(x0 0,y0 0)开始,开始,d的初值的初值d0 0=F(x0 0+1,y0 0+0.5)=a(x0 0+1)+b(y0 0+0.5)+c =F(x0 0,y0 0)+a+0.5b=a+0.5b 由于只用由于只用d 的符号作判断,为了只包含整数运算的符号作判断,为了只包含整数运算,可以用可以用2d代替代替d来摆脱小数,提高效率。来摆脱小数,提高效率。计算机图形学
10、计算机图形学中点画线法中点画线法void Midpoint Line(int x0 0,int y0 0,int x1 1,int y1 1,int color)int a,b,d1 1,d2 2,d,x,y;a=y0 0-y1 1,b=x1 1-x0 0,d=2*a+b;d1 1=2*a,d2 2=2*(a+b);x=x0 0,y=y0 0;drawpixel(x,y,color);while(xx1 1)if(d=1d=1就把它减掉,就把它减掉,当当d0.5d0.5的时候就选择的时候就选择(x+1,y+1)(x+1,y+1)否则取下个像素否则取下个像素点为点为(x+1,y)(x+1,y)计
11、算机图形学计算机图形学 程序如下:程序如下:BresenhamLine(x0,y0,x1,y1,color)int x0,y0,x1,y1,color;int x,y,dx,dy;float k,e;int e;dx=x1-x0;dy=y1-y0;k=dy/dx;e=-0.5;x=x0;y=y0;e=-dx;for(i=0;i=0)y+;e=e-1;/;e=e-2*dx;Bresenham画线算法画线算法计算机图形学计算机图形学圆的扫描转换算法圆的扫描转换算法下面仅以圆心在原点、半径下面仅以圆心在原点、半径R为整数的圆为整数的圆为例,讨论圆的生成算法。为例,讨论圆的生成算法。假设圆的方程为:假
12、设圆的方程为:X2 +Y2 =R2计算机图形学计算机图形学圆弧扫描算法圆弧扫描算法lX2 +Y2 =R2Y=Sqrt(R2-X2)在一定范围内,每给定一在一定范围内,每给定一X值,可得一值,可得一Y值。值。当当X取整数时,取整数时,Y须取整。须取整。缺点:浮点运算,开方,缺点:浮点运算,开方,取整,不均匀。取整,不均匀。yx计算机图形学计算机图形学角度角度DDA法法 x=x0+Rcos y=y0+Rsin dx=-Rsin d dy=Rcos d xn+1=x n+dxy n+1=y n+dyxn+1=x n+dx=x n-Rsin d =x n-(y n-y 0)d y n+1=y n+dy
13、=y n+Rcos d =y n+(x n-x 0)d 显然,确定显然,确定x,y的初值及的初值及d 值后,即可以增量方值后,即可以增量方式获得圆周上的坐标,然后取整可得象素坐标。式获得圆周上的坐标,然后取整可得象素坐标。但要采用浮点运算、乘法运算、取整运算。但要采用浮点运算、乘法运算、取整运算。计算机图形学计算机图形学中点画圆法中点画圆法利用圆的对称性,只须讨论利用圆的对称性,只须讨论1/8圆。第二个圆。第二个8分圆分圆P为当前点亮象素,那么,下一个点亮的象素可为当前点亮象素,那么,下一个点亮的象素可能是能是P1(Xp+1,Yp)或)或P2(Xp+1,Yp+1)。MP1P2P(Xp,Yp)计
14、算机图形学计算机图形学中点画圆法中点画圆法构造函数:构造函数:F(X,Y)=X2 +Y2-R2;则;则 F(X,Y)=0 (X,Y)在圆上;)在圆上;F(X,Y)0 (X,Y)在圆外。)在圆外。设设M为为P1、P2间的中点,间的中点,M=(Xp+1,Yp-0.5)MP1P2计算机图形学计算机图形学中点画圆法中点画圆法有如下结论:有如下结论:F(M)M在圆内在圆内-取取P1 F(M)=0-M在圆外在圆外-取取P2为此,可采用如下判别式:为此,可采用如下判别式:MP1P2计算机图形学计算机图形学中点画圆法中点画圆法 d=F(M)=F(xp+1,yp-0.5)=(xp+1)2+(yp-0.5)2-R
15、2 若若d=0,则则P2 为下一个象素,那么再下一个象素为下一个象素,那么再下一个象素的判别式为:的判别式为:d1=F(xp+2,yp-1.5)=(xp+2)2+(yp-1.5)2-R2 =d+(2xp+3)+(-2 yp+2)即即d 的增量为的增量为 2(xp-yp)+5.d的初值的初值:d0=F(1,R-0.5)=1+(R-0.5)2-R2 =1.25-RMP1P2计算机图形学计算机图形学中点画圆法中点画圆法 MidpointCircle(int r,int color)int x,y;float d;x=0;y=r;d=1.25-r;drawpixel(x,y,color);while(
16、xy)if(d F(xi,yi)向右-向圆外Pi在圆外时-F(xi,yi)0-向下-向圆内计算机图形学计算机图形学生成圆弧的正负法生成圆弧的正负法即求得即求得P Pi i点后选择下一个象素点点后选择下一个象素点P Pi+1i+1的规则为:的规则为:当当F(xF(xi i,y,yi i)0 )0 取取x xi+1i+1=x=xi i+1+1,y yi+1i+1=y=yi i;当当F(xF(xi i,y,yi i)0 0 取取x xi+1i+1=x=xi i,y yi+1i+1=y=yi i-1;-1;这样用于表示圆弧的点均在圆弧附近,且使这样用于表示圆弧的点均在圆弧附近,且使F(xF(xi i,
17、y,yi i)时正时负,故称正负法。时正时负,故称正负法。快速计算的关键是快速计算的关键是F(xF(xi i,y,yi i)的计算,能否采用增的计算,能否采用增量算法?量算法?计算机图形学计算机图形学生成圆弧的正负法生成圆弧的正负法l若若F(xF(xi i,y,yi i)已知,计算已知,计算F(xF(xi+1i+1,y,yi+1i+1)可分两种可分两种情况:情况:l1 1、F(xF(xi i,y,yi i)0-x)0-xi+1i+1=x=xi i+1+1,y yi+1i+1=y=yi i;l -F(x -F(xi+1i+1,y,yi+1i+1)=(x)=(xi+1 i+1)2+(y+(yi+1
18、i+1)2-R-R2l -=(x-=(xi i+1)+1)2+y+yi i2 -R-R2=F(x=F(xi i,y,yi i)+2x)+2xi i+1+1l2 2、F(x F(xi i,y,yi i)0-x0-xi+1i+1=x=xi i,y yi+1i+1=y=yi i-1;-1;l -F(x -F(xi+1i+1,y,yi+1i+1)=(x)=(xi+1 i+1)2+(y+(yi+1i+1)2-R-R2l -=x-=xi i2+(y+(yi i 1)1)2-R-R2=F(x=F(xi i,y,yi i)-2y)-2yi i+1+1l3 3、初始值:略、初始值:略计算机图形学计算机图形学生成
19、圆弧的多边形逼近法生成圆弧的多边形逼近法圆的内接正多边形迫近法圆的等面积正多边形迫近法计算机图形学计算机图形学圆的内接正多边形逼近法圆的内接正多边形逼近法l思想:当一个正多边形的边数足够多时,思想:当一个正多边形的边数足够多时,该多边形可以和圆无限接近。即该多边形可以和圆无限接近。即l因此,在允许的误差范围内,可以用正因此,在允许的误差范围内,可以用正多边形代替圆。多边形代替圆。l设内接正设内接正n边形的顶点为边形的顶点为P Pi i(x(xi i,y,yi i),P),Pi i的幅的幅角为角为 i,每一条边对应的圆心角为每一条边对应的圆心角为a,则有,则有lx xi i=Rcos i ly
20、yi i=Rsin i计算机图形学计算机图形学圆的内接正多边形逼近法圆的内接正多边形逼近法 内接正n边形代替圆l计算多边形各顶点的递推公式 Xi+1 Rcos(a+i)=Yi+1 Rsin(a+i)Xi+1 cos a-sin a Xi =Yi+1 sin a cosa Yi因为因为:a是常数,是常数,sin a,cosa只在开始时计算一次只在开始时计算一次所以,一个顶点只需所以,一个顶点只需4次乘法,共次乘法,共4n次乘法,外次乘法,外加直线段的中点算法的计算量。加直线段的中点算法的计算量。计算机图形学计算机图形学圆的等面积正多边形逼近法圆的等面积正多边形逼近法l当用内接正多边形逼近圆时,其
21、面积要当用内接正多边形逼近圆时,其面积要小于圆的面积;而当用圆的外切正多边小于圆的面积;而当用圆的外切正多边形逼近圆时,其面积则要大于圆的面积。形逼近圆时,其面积则要大于圆的面积。为了使近似代替圆的正多边形和圆之间为了使近似代替圆的正多边形和圆之间在面积上相等,只有使该正多边形和圆在面积上相等,只有使该正多边形和圆弧相交,称之为圆的等面积正多边形。弧相交,称之为圆的等面积正多边形。计算机图形学计算机图形学圆的等面积正多边形逼近法圆的等面积正多边形逼近法步骤:l求多边形径长,从而求所有顶点坐标值l由逼近误差值,确定边所对应的圆心角计算机图形学计算机图形学椭圆的扫描转换椭圆的扫描转换lF(x,y)
22、=b2x2+a2y2-a2b2=0l椭椭圆圆的的对对称称性性,只只考考虑虑第第一一象象限限椭椭圆圆弧弧生生成成,分分上上下下两两部部分分,以以切切线线斜斜率率为为-1的点作为分界点。的点作为分界点。l椭圆上一点处的法向:椭圆上一点处的法向:N(x,y)=(F)x i +(F)y j =2b2 x i +2a2 y j计算机图形学计算机图形学在上半部分,法向量的y分量大在下半部分,法向量的x分量大上半部分下半部分法向量两分量相等M1M2在当前中点处,法向量(2b2(Xp+1),2a2(Yp-0.5)的y分量比x分量大,即:b2(Xp+1)a2(Yp-0.5),而在下一中点,不等式改变方向,则说明
23、椭圆弧从上部分转入下部分计算机图形学计算机图形学椭圆的中点画法椭圆的中点画法l与与圆圆弧弧中中点点算算法法类类似似:确确定定一一个个象象素素后后,接接着着在在两两个个候候选选象象素素的的中中点点计计算算一一个个判判别别式式的的值值,由判别式的符号确定更近的点由判别式的符号确定更近的点先讨论椭圆弧的上部分先讨论椭圆弧的上部分设设(Xp,Yp)已已确确定定,则则下下一一待待选选像像素素的的中中点点是是(Xp+1,Yp-0.5)d1=F(Xp+1,Yp-0.5)=b2(Xp+1)2+a2(Yp-0.5)2-a2b2计算机图形学计算机图形学 根根据据d1的的符符号号来来决决定定下下一一像像素素是是取取
24、正正右右方方的的那那个个,还是右上方的那个。还是右上方的那个。l若若d10,中中点点在在椭椭圆圆内内,取取正正右右方方象象素素,判判别别式更新为:式更新为:d1=F(Xp+2,Yp-0.5)=d1+b2(2Xp+3)d1的增量为的增量为b2(2Xp+3)l当当d10,中中点点在在椭椭圆圆外外,取取右右下下方方象象素素,更更新新判判别式:别式:d1=F(Xp+2,Yp-1.5)=d1+b2(2Xp+3)+a2(-2Yp+2)d1的增量为的增量为b2(2Xp+3)+a2(-2Yp+2)计算机图形学计算机图形学l d1的初始条件:椭圆弧起点为的初始条件:椭圆弧起点为(0,b);l第一个中点为第一个中
25、点为(1,b-0.5)初始判别式:初始判别式:d10=F(1,b-0.5)=b*b+a*a(-b+0.25)l转转入入下下一一部部分分,下下一一象象素素可可能能是是正正下下方方或或右右下下方,此时判别式要初始化。方,此时判别式要初始化。d2=F(Xp+0.5,Yp-1)=b2(Xp+0.5)2+a2(Yp-1)2-a2b2 若若d2=0,取正下方像素,则取正下方像素,则d2=F(Xp+0.5,Yp-2)=d2+a2(-2Yp+3)下半部分弧的终止条件为下半部分弧的终止条件为 y=0计算机图形学计算机图形学区域填充算法区域填充算法l区域指已经表示成点阵形式的填充图形,指已经表示成点阵形式的填充图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 图形 生成 算法
限制150内