《图形显示算法基础》PPT课件.ppt
《《图形显示算法基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《图形显示算法基础》PPT课件.ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、所谓图元的生成,是指完成图元的参数表示形式所谓图元的生成,是指完成图元的参数表示形式(由图形软件包的使用者指定)由图形软件包的使用者指定)到点阵表示形式到点阵表示形式(光栅显示系统刷新时所需的表示形式)(光栅显示系统刷新时所需的表示形式)的转换。的转换。通常也称扫描转换图元。通常也称扫描转换图元。第第7章图形显示算法基础章图形显示算法基础1直线的生成算法直线的生成算法基本知识基本知识只有画水平线只有画水平线,垂直线垂直线,及正方形及正方形对角线时对角线时,象素点集的位置才是准确的。象素点集的位置才是准确的。显示一条直线显示一条直线,实际上是用最靠实际上是用最靠近这条直线的象素点集来近似地表示近
2、这条直线的象素点集来近似地表示这条直线这条直线.有限的象素矩阵有限的象素矩阵画点设备画点设备 光栅显示器光栅显示器:缓冲存储器,显示控制器,缓冲存储器,显示控制器,数数/模转换器,阴级射线管(模转换器,阴级射线管(CRTCRT)A(x1,y1)、B(x2,y2)、在纸上画一条直线和在计算机屏幕上画一条直线在纸上画一条直线和在计算机屏幕上画一条直线有什么本质的区别有什么本质的区别?2生成直线的一般要求是:生成直线的一般要求是:1.DDA算法(数值微分法)算法(数值微分法)2.直线的直线的Bresenham算法算法 确定象素最佳逼近某图形的过程通常称为确定象素最佳逼近某图形的过程通常称为光栅化光栅
3、化。图形生成算法的工作图形生成算法的工作:在显示器所给定的有限个象素组成的矩阵中在显示器所给定的有限个象素组成的矩阵中,确定确定最佳逼近于图形的象素点集最佳逼近于图形的象素点集.1.象素是均匀分布的象素是均匀分布的2.所画的线应是直的,且有精确的起点和终点所画的线应是直的,且有精确的起点和终点4.4.最后直线的生成速度要快最后直线的生成速度要快3.所显示的亮度应沿直线不变,且与直线的长度和方向所显示的亮度应沿直线不变,且与直线的长度和方向无关。无关。直线光栅化的方法直线光栅化的方法3已知端点已知端点A(x1,y1)、B(x2,y2),直线的微分方程:直线的微分方程:dy/dx=(y2-y1)/
4、(x2-x1)=常数常数=m yi+1yi+(y2-y1)/(x2-x1)*x=yi+m*x yi=m xi +Byi+1=m xi+1+B =m(xi+x)+B A(x1,y1)B(x2,y2)Pi(xi,yi)Pi+1(xi+1,yi+1)dy=kdxdxDDA算法算法(Digital Differential Algorithm)通过同时对通过同时对x,yx,y各增加一个小的增量各增加一个小的增量,计算下一步的计算下一步的x,yx,y值。在一个值。在一个迭代算法中迭代算法中,如果每一步的如果每一步的x,yx,y值是用前一步的值加上一个增量来获得值是用前一步的值加上一个增量来获得,那么这种
5、算法称为增量算法。那么这种算法称为增量算法。4光栅中光栅中 x=1直线的递推公式直线的递推公式 yi+1yi+(y2-y1)/(x2-x1)xi+1xi+1double x=x1,y=y1;m=(y2-y1)/(x2-x1);int k=abs(x2-x1);for(int i=0;ix10,y2y105oxyk1讨论讨论:oxyk1(xi+1,round(yi+1))xi+1=xi+1yi+1=yi+kk x1,y2 y1)以(以(x1,y1)为起点)为起点7DDADDA算法的优、缺点算法的优、缺点 DDA算法的本质算法的本质:效率低效率低,不利于硬件实现不利于硬件实现 直观可行直观可行 D
6、DA算法也是一个算法也是一个增量算法增量算法。缺陷缺陷:做除法做除法;须采用浮点数据计算须采用浮点数据计算要取整数要取整数-算法效率不高算法效率不高算法程序实现算法程序实现k=abs(x2-x1);if(abs(y2-y1)k)double deltx=(x2-x1)/k;double delty=(y2-y1)/k;for(int i=0;i=k;i+)x+=deltx;/x=x+deltx;y+=delty;/y=y+delty;k=abs(y2-y1);putpixel(int)x,(int)y,2);用数值方法解微分方程用数值方法解微分方程(数数值微分法值微分法)81.问题的提出问题的
7、提出 2.基本思想基本思想 a.效率的意义效率的意义b.希望找到一个简单的判决条件希望找到一个简单的判决条件,迅速确定直线上的点。迅速确定直线上的点。借助于一个决策变量借助于一个决策变量 d的正负符号的正负符号,来确定下一个该点亮的象素点来确定下一个该点亮的象素点。最逼近最逼近Pi+1点的点的象象素点是素点是Ti+1点还是点还是Si+1点?由点?由ti+1与与si+1二者的相对大小决定。二者的相对大小决定。若若ti+1si+1,则取则取Si点点(xi+1,yi)ti+1与与si+1二者的大小可以由二者的大小可以由si+1-ti+1的正负来判定。的正负来判定。stTiSi(r,q)直线的直线的B
8、resenham算法算法9 为讨论方便为讨论方便,假定假定:直线斜率直线斜率k在在 0,1 之之 间间起点坐标起点坐标 A(x1,y1)终点坐标终点坐标 B(x2,y2)将直线平移到原点将直线平移到原点则起点坐标则起点坐标(0,0),终点坐标终点坐标B(dx,dy)dx=x2-x1dy=y2-y1其中其中直线方程为:直线方程为:且且其中其中r=xi-1,q=yi-1stT Ti iS Si i(r,q)所以所以定义定义di=dx(s-t)为决策变量为决策变量10经推导经推导 di+1=di+2dy-2dx*(yi-yi-1)如果如果1)当当di0,即,即s-t0,st,则点亮则点亮Ti,2)当
9、当di0,即,即s-t0,s=0点亮点(点亮点(1,1)点亮点(点亮点(2,1)d3=d2+2dy-12*4=7=0d2=d1+2(dy-dx)12*(4-5)=-1=0点亮点(点亮点(4,3)d4=d3+2(dy-dx)52*(4-5)=3=0点亮点(点亮点(5,4)举例举例:从点从点A(0,0)到到B(5,4)画一直线画一直线.di0di0yi=yi-1+1;xi=xi-1+1;yi=yi-1;xi=xi-1+1;12一个完整的直线算法应考虑以下几个方面一个完整的直线算法应考虑以下几个方面1.水平线水平线2.垂直线垂直线4.直线的斜率为直线的斜率为m,|m|15.|m|16.y07.x y
10、Inter=0d=2(x*dx-y*dy)+2*dy-dxi=1;putpixel(x,y,color)d0YNYNd0 x=x+s1 y=y+s2d=d+2(dy-dx)inter=1x=x+s1d=d+2*dyy=y+s2i=i+1YYNN14void line(int x1,int y1,int x2,int y2,int c)/*参数参数c为直线的颜色为直线的颜色*/int dx,dy,x,y,d,const1,const2,tmp;int s1,s2,inter;dx=abs(x2-x1);dy=abs(y2-y1);if(x2x1)s1=1;else s1=-1;if(y2y1)s
11、2=1;else s2=-1;if(dydx)tmp=dx;dx=dy;dy=tmp;inter=1;else inter=-1;d=2*dy-dx;const1=2*dy;/*注意此时误差的注意此时误差的*/const2=2*(dy-dx);/*变化参数取值变化参数取值.*/x=x1;y=y1;putpixel(x,y,c);for(i=1;i=0)y+=s2;x+=s1;d+=const2;else if(inter=1)y+=s2;else x+=s1;d+=const2;putpiexl(x,y,c);15生成直线算法的进一步改进生成直线算法的进一步改进1987年有人提出二步法,即没循
12、环一次不是绘制一个象素,而年有人提出二步法,即没循环一次不是绘制一个象素,而是绘制二个象素,这样无疑可以把生成直线的速度提高一倍。是绘制二个象素,这样无疑可以把生成直线的速度提高一倍。只可能出现的四种情况只可能出现的四种情况A AB BC CD D同样,我们先考虑当直线的斜率同样,我们先考虑当直线的斜率m属于区间属于区间0,1时,在时,在x方向方向每增加两个单元每增加两个单元16圆弧的扫描法圆弧的扫描法已知圆的圆心坐标为(已知圆的圆心坐标为(xc,yc),半径为),半径为R圆的直角坐标方程表示为圆的直角坐标方程表示为 (x-xc)2+(y-yc)2=R2x0=xc-Ry0=y yc cxi+1
13、=xi+1yi+1(xi+1,Round(yi+1)缺点缺点:(1)运算速度慢运算速度慢(2)显示质量不好显示质量不好(xc,yc)(xc-R,yc)角度角度DDA算法算法圆弧的扫描法圆弧的扫描法正负法、圆弧的正负法、圆弧的Bresenham算法、算法、T-N方法等方法等圆弧的生成算法圆弧的生成算法17由圆的参数方程由圆的参数方程推导出圆弧的增量算法的表达式推导出圆弧的增量算法的表达式:缺点:所产生的圆是不封闭的,且该圆的半径有不断增大的趋势。缺点:所产生的圆是不封闭的,且该圆的半径有不断增大的趋势。取微分取微分令令x0=Ry0=0起点起点(x0,y0)=02,为所画圆弧的圆心角为所画圆弧的圆
14、心角单位为弧度单位为弧度d 2-m 角度增量,角度增量,m 为整数。为整数。已知圆的圆心坐标为(已知圆的圆心坐标为(0,0),半径为),半径为R(0,0)(R,0)角度角度DDA算法算法(近似法近似法)18PiPi+1原因:原因:Pi+1是在是在Pi上加一个小的矢量而得到,这上加一个小的矢量而得到,这个矢量垂直于位置矢量个矢量垂直于位置矢量Pi。因此新的半径经常比前一个半径大,从而因此新的半径经常比前一个半径大,从而得到的曲线是一条螺线。得到的曲线是一条螺线。将第二式中的将第二式中的 xi 用用 xi+1 代替代替,则有则有:yi+1=yi+xi+1d=yi+(xi-yid)d=d xi+(1
15、-d2)yixi+1=xi-yid为椭圆为椭圆 d 2-m,当,当m=4时,此椭圆与精确圆之间的误差时,此椭圆与精确圆之间的误差E椭圆差分法椭圆差分法1910/30/2022 hjy-20dPi+1PiOXY1 pixel=R sin dd=arc sin-11/R令:令:旋转法旋转法20 xy(xc,yc)方程方程若若F(x,y)0点点(x,y)在圆在圆外外若若F(x,y)=0点点(x,y)在圆在圆上上2.F(x,y)=0 是二阶光滑是二阶光滑FFFF1.F(x,y)=0 划分平面域为3个点集函数的特点:函数的特点:FF圆的方程为:圆的方程为:3.每一个点的曲率半径步长 (1 pixel)正
16、负法(隐函数曲线正负法(隐函数曲线)21(0,R)若点若点Pi在圆内或圆上,在圆内或圆上,即即 F(xi,yi)0若点若点Pi在圆外,在圆外,即即 F(xi,yi)0以第一个以第一个1/4圆弧为例,取圆弧的圆弧为例,取圆弧的最上方点为起始点最上方点为起始点(x0,y0),x0=0 y0=R点点Pi+1取取R点,即点,即xi+1=xi+1,yi+1=yi点点Pi+1取取B点点,即,即xi+1=xi,yi+1=yi-1由当前点由当前点Pi(xi,yi)选择下一点选择下一点Pi+1(xi+1,yi+1)的规则是:的规则是:xyo22则则当当xi+1=xi+1,yi+1=yi时时,当当xi+1=xi,
17、yi+1=yi-1时时,23结论结论第一个第一个1/4圆弧的正负法算法:圆弧的正负法算法:若若F(xi,yi)0(点在内侧,下一点选外侧)(点在内侧,下一点选外侧)若若F(xi,yi)0(点在外侧,下一点选内侧)(点在外侧,下一点选内侧)xi+1=xi+1,yi+1=yixi+1=xi,yi+1=yi-1已知圆心坐标为(已知圆心坐标为(xc,yc),半径为),半径为R,起始点起始点(x0,y0)x0=xc y0=yc+R24以坐标原点为圆心的第一象限以坐标原点为圆心的第一象限1/4圆为例圆为例XYOV(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)(0,R)(R,
18、0)起点为起点为(0,R),按顺时针方向生成圆,按顺时针方向生成圆则则y为为x的单调递减函数的单调递减函数设设P(xi,yi)点为当前点圆上的亮点点为当前点圆上的亮点下一个该显示的象素有三种可能下一个该显示的象素有三种可能:右方象素右方象素H、右下方右下方D、下方象素下方象素V决定一象素使其与真正圆的距离的平方最小决定一象素使其与真正圆的距离的平方最小222)1(RyxmiiV-+=222)1()1(RyxmiiD-+=2 22 22 2)1 1(R Ry yx xmmi ii iHH-+=圆在与点圆在与点P(xi,yi)附近光栅网格的相交附近光栅网格的相交关系只有关系只有5种种123451.
19、基本思想基本思想圆弧的圆弧的Bresenham算法算法25五种情况分解图:五种情况分解图:H,D,V全在圆内全在圆内H H在圆外,在圆外,D,VD,V在圆内在圆内D在圆上,在圆上,H在圆外,在圆外,V在圆内在圆内D,H在圆外,在圆外,V在圆内在圆内D,V,H 全在圆外全在圆外HDVHDVHDVDVHV(xV(xi i,y,yi i-1)-1)P(xP(xi i,y,yi i)H(xH(xi i+1,y+1,yi i)D(xD(xi i+1,y+1,yi i-1)1)1 12 23 34 45 5HDV取取D点点取取H点或点或D点点取取D点或点或V点点取取H点点取取V点点26首先计算圆心到右下角
20、象素首先计算圆心到右下角象素D的距离平方的距离平方与圆心到圆弧上的点的距离平方之差与圆心到圆弧上的点的距离平方之差如果如果i0,说明说明D点在圆内点在圆内,只能是只能是1,2情况,情况,可选可选D点或点或H点点设设 为圆到象素为圆到象素H的距离平方与圆到象素的距离平方与圆到象素D的距离平方之差。的距离平方之差。|(xi+1)2+(yi)2-R2|-|(xi+1)2+(yi-1)2-R2|Mh Md如果如果 0,应选应选D(xi+1,yi-1)如果如果=0,规定选规定选D(xi+1,yi-1)V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)12327对于情况对于情
21、况2,左下角,左下角D总是位于圆内,而总是位于圆内,而H点总是位于圆外点总是位于圆外(xi+1)2+(yi-1)2-R20 =2(i+yi)-1对于情况对于情况1,由于由于y为一单调递减函数,只能选取为一单调递减函数,只能选取H点点因为:因为:(xi+1)2+(yi)2-R20(xi+1)2+(yi-1)2-R20 =(yi-1)2-(yi)2=0V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)123|(xi+1)2+(yi)2-R2|-|(xi+1)2+(yi-1)2-R2|28如果如果i0,说明说明D点在圆外点在圆外,只能是只能是4,5情况,情况,可选可选V
22、点或点或D点点设设 为圆到象素为圆到象素D的距离平方与圆到象素的距离平方与圆到象素V的距离平方之差。的距离平方之差。|(xi+1)2+(yi-1)2-R2|-|(xi)2+(yi-1)2-R2|如果如果 0,如果如果=0,规定选规定选D(xi+1,yi-1)说明圆到说明圆到D点的距离大点的距离大 应选应选V(xi,yi-1)情况情况4:由于由于D在圆外,而在圆外,而V在在圆内圆内:(xi+1)2+(yi-1)2-R2=0(xi)2+(yi-1)2-R20结论与情况结论与情况4是一致的是一致的对于情况对于情况3,应选应选D点点V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,
23、yi-1)4529归纳总结:归纳总结:当当i0时,时,0,取取D(xi+1,yi-1)点点当当i0时,时,0,取取V(xi,yi-1)点点当当i=0时,时,取取D(xi+1,yi-1)点点V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)30水平移动到水平移动到H(xi+1,yi)点点Xi+1=xi+1yi+1=yii+1=(xi+1+1)2+(yi+1-1)2-R2(xi+1)2+(yi-1)2-R2 i+2xi+1+1对角移动到对角移动到D点点Xi+1=xi+1yi+1=yi-1i+1=i+2xi+1-2yi+1+2移动到移动到V点点Xi+1=xiyi+1=y
24、i-1i+1=i-2yi+1+1V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi+1,yi-1)圆弧的圆弧的Bresenham算法的优点算法的优点:起点和终点准确,分布均匀,计算简单。起点和终点准确,分布均匀,计算简单。由上面的分析由上面的分析,增量算法的递推公式增量算法的递推公式:31画圆心为画圆心为(0,0),半径半径R=8的四分之一的圆弧的四分之一的圆弧初始条件初始条件:x1=0;y1=8;R=8 1=(x1+1)2+(y1-1)2-R2=1+49-64=-140;HD=2(1+y1)-1=2(-14+8)-1=-130取取H点点 2=1+2x2+1=-14+2*1+1=
25、-110 HD=2(2+y2)-1=2(-11+8)-1=-70取取D点点取取H点点点亮点点亮点(0,8)可能点亮可能点亮H或或D点点x2=1y2=8 3=2+2x3+1=-11+2*2+1=-60 x3=2y3=8x4=3y4=74=3+2x4-2y4+2=-6+2*3-2*7+2=-120 HD=2(3+y4)-1=2(-12+7)-1=-110取取H点点x4=4y4=75=4+2x5+1=-12+2*4+1=-30取取D点点x5=5y5=66=5+2x5-2y5+2=-3+2*5-2*6+2=-30取取D点点x6=6y6=5V(xi,yi-1)P(xi,yi)H(xi+1,yi)D(xi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形显示算法基础 图形 显示 算法 基础 PPT 课件
限制150内