计算机图形学教案第5章基本图形生成算法.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《计算机图形学教案第5章基本图形生成算法.ppt》由会员分享,可在线阅读,更多相关《计算机图形学教案第5章基本图形生成算法.ppt(129页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 基本图形生成算法本章要解决的问题本章要解决的问题 如如何何在在指指定定的的输输出出设设备备上上根根据据坐坐标标描描述构造基本二维几何图形。述构造基本二维几何图形。图图形形的的生生成成:在在指指定定的的输输出出设设备备上上,根根据据坐坐标标描述构造二维几何图形。描述构造二维几何图形。图图形形的的扫扫描描转转换换:在在光光栅栅显显示示器器等等数数字字设设备备上上确确定定一一个个最最佳佳逼逼近近于于图图形形的的象象素素集集的的过过程程(连连续图形到象素集的转换)。续图形到象素集的转换)。5.1 直线的扫描转换直线的扫描转换 给给定定直直线线两两端端点点P P0 0(x(x0 0,y,y0 0
2、)和和P P1 1(x(x1 1,y,y1 1),画画出该直线。出该直线。要求:要求:直、端点准确、色泽均匀、速度快等。直、端点准确、色泽均匀、速度快等。数值微分法数值微分法(DDA法)直线的微分方程:直线的微分方程:DDA算法原理算法原理:=1/max(|x|,|y|)max(|x|,|y|)=|x|,即|k|1的情况:max(|x|,|y|)=|y|,此时|k|1:注注:round(x)=(int)(x+0.5)void DDAline(int x0,int y0,int x1,int y1)int dx,dy,epsl,k;float x,y,xIncre,yIncre;dx=x1-x0
3、;dy=y1-y0;x=x0;y=y0;if(abs(dx)abs(dy)epsl=abs(dx);else epsl=abs(dy);xIncre=(float)(dx)/epsl;yIncre=(float)(dy)/epsl;for(k=0;k0;对于直线下方的点,F(x,y)0。直线的方程:基本原理基本原理:假定0k1,x是最大位移方向判别式判别式:则有:误差项的递推误差项的递推d0:误差项的递推误差项的递推d0:初始值初始值d的计算的计算0k1时Bresenham算法的算法步骤算法步骤为:1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。2.计算初始值x、y、d=0.5-k
4、、x=x0、y=y0;3.绘制点(x,y)。判断d的符号;若d0,则(x,y)更新为(x+1,y+1),d更新为d+1-k;否则(x,y)更新为(x+1,y),d更新为d-k。4.当直线没有画完时,重复步骤3。否则结束。改进改进:用2dx代替d1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。2.计算初始值x、y、d=x-2y、x=x0、y=y0。3.绘制点(x,y)。判断d的符号。若dx1)x=x1;x1=x0;x0=x;y=y1;y1=y0;y0=y;x=x0;y=y0;dx=x1-x0;dy=y1-y0;d=dx-2*dy;UpIncre=2*dx-2*dy;DownIncre
5、=-2*dy;while(x=x1)putpixel(x,y);x+;if(d0.5,则(x,y)更新为(x+1,y+1),同时将d更新为d-1;否则(x,y)更新为(x+1,y)。5.当直线没有画完时,重复步骤3和4。否则结束。改进改进1:令e=d-0.5e初=-0.5,每走一步有e=e+k。if(e0)thene=e-1算法步骤算法步骤为:1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。2.计算初始值x、y、e=-0.5、x=x0、y=y0。3.绘制点(x,y)。4.e更新为e+k,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-1;否则(x,y)
6、更新为(x+1,y)。5.当直线没有画完时,重复步骤3和4。否则结束。改进改进2:用2ex来替换ee初=-x,每走一步有e=e+2y。if(e0)thene=e-2x算法步骤算法步骤:1.输入直线的两端点P0(x0,y0)和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。否则结束。void Bhline(int x0,int y0,int x1,int y1)int x,
7、y,dx,dy,e;if(x0 x1)x=x1;x1=x0;x0=x;y=y1;y1=y0;y0=y;dx=x1-x0;dy=y1-y0;x=x0;y=y0;e=-dx;while(x0)y+;e=e-2*dx;思考题 对于前述几种直线生成算法和程序:对于前述几种直线生成算法和程序:1.当最大位移方向是当最大位移方向是y时,应如何修改?时,应如何修改?2.要达到通用时,应如何修改?要达到通用时,应如何修改?5.2 圆的扫描转换圆的扫描转换解决的问题:解决的问题:绘绘 出出 圆圆 心心 在在 原原 点点,半半 径径 为为 整整 数数 R的的 圆圆x2+y2=R2 八分法画圆八分法画圆(y,x)(
8、-y,x)(-x,y)(-x,-y)(-y,-x)(y,-x)(x,-y)解决问题解决问题:八分法画圆程序:八分法画圆程序:void circlePoint(int x,int y)putpixel(x,y);putpixel(y,x);putpixel(-y,x);putpixel(-x,y);putpixel(-x,-y);putpixel(-y,-x);putpixel(y,-x);putpixel(x,-y);考虑通用:考虑通用:void circlePoint(int x0,int y0,int x,int y)putpixel(x-x0,y-y0);putpixel(y-x0,x-
9、y0);putpixel(-y+x0,x-y0);putpixel(-x+x0,y-y0);putpixel(-x+x0,-y+y0);putpixel(-y+x0,-x+y0);putpixel(y-x0,-x+y0);putpixel(x-x0,-y+y0);简单方程产生圆弧简单方程产生圆弧算法原理算法原理:利用其函数方程,直接离散计算圆的函数方程为:圆的极坐标方程为:中点中点Bresenham画圆画圆构造函数构造函数F(x,y)=x2-y2-R2。对于圆上的点,有对于圆上的点,有F(x,y)=0;对于圆外的点,对于圆外的点,F(x,y)0;而对于圆内的点,而对于圆内的点,F(x,y)0时
10、:下一点取Pd(xi+1,yi-1)。构造判别式构造判别式:误差项的递推误差项的递推d0:d0:判别式的初始值判别式的初始值算法步骤算法步骤:1.输入圆的半径R。2.计算初始值d=1.25-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时,重复步骤3和4。否则结束。改进:用改进:用d-0.25代替代替d算法步骤:算法步骤:1.输入圆的半径输入圆的半径R。2.计算初始值计算初始值d=1-R、x=
11、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时,重复步骤时,重复步骤3和和4。否则结束。否则结束。d0.25中点中点Bh画圆程序画圆程序void MidBhcircle(int r)int x,y,d;x=0;y=r;d=1-r;while(xy)circlePoint(x,y);if(d0)d+=2
12、*x+3;else d+=2*(x-y)+5;y-;x+;5.3 椭圆的扫描转换椭圆的扫描转换椭圆的特征椭圆的特征椭圆上:F(x,y)=0椭圆内:F(x,y)0只需计算第一象限四分椭圆以弧上斜率为1的点作为分界将第一象限椭圆弧分为上下两部分。两部分的最大位移方向不同引理引理5-1:若在当前中点,法向量的y分量比x分量大,即而在下一个中点,不等号改变方向,则说明椭圆弧从上部分转入下部分。法向量法向量椭圆的中点椭圆的中点Bresenham算法算法算法原理算法原理x步长为1y步长为1先推导上半部分的椭圆绘制公式判别式判别式若d10,取Pu(xi+1,yi)若d10,取Pd(xi+1,yi-1)误差项
13、的递推误差项的递推d10:d10:判别式的初始值判别式的初始值再来推导椭圆弧下半部分的绘制公式原理原理判别式判别式若d20,取Pl(xi,yi-1)若d20,取Pr(xi+1,yi-1)5-19 下半部分椭圆弧的绘制原理p(xi,yi)pl(xi,yi-1)pr(xi+1,yi-1)M(xi+0.5,yi-1)误差项的递推误差项的递推d20:d20:注意注意:上半部分的终止判别:b2(x+1)a2(y-0.5)下半部分误差项的初值:用上半部的用上半部的(x,y)计算计算算法步骤算法步骤:1.输入椭圆的长半轴a和短半轴b。2.计算初始值d=b2+a2(-b+0.25)、x=0、y=b。3.绘制点
14、(x,y)及其在四分象限上的另外三个对称点。4.判断d的符号。若d0,则先将d更新为d+b2(2x+3),再将(x,y)更新为(x+1,y);否则先 将 d更 新 为 d+b2(2x+3)+a2(-2y+2),再 将(x,y)更新为(x+1,y-1)。5.当b2(x+1)0时,重复步骤7和8。否则结束。第一象限椭圆弧的扫描转换程序第一象限椭圆弧的扫描转换程序voidMidBhllipse(inta,intb)intx,y;floatd1,d2;x=0;y=b;d1=b*b+a*a*(-b+0.25);putpixel(x,y);putpixel(-x,-y);putpixel(-x,y);pu
15、tpixel(x,-y);while(b*b*(x+1)a*a*(y-0.5)if(d10)if(d2=0)d2+=b*b*(2*x+2)+a*a*(-2*y+3);x+;y-;else d2+=a*a*(-2*y+3);y-;putpixel(x,y);putpixel(-x,-y);putpixel(-x,y);putpixel(x,-y);5.4 多边形的扫描转换与区域填充多边形的扫描转换与区域填充多边形的扫描转换多边形的扫描转换多边形填充多边形填充 给定多边形顶点,填充多边形多边形内给定多边形顶点,填充多边形多边形内的所有点。的所有点。区域填充区域填充种子填充种子填充 给定区域内的一点
16、(种子),填充围定给定区域内的一点(种子),填充围定该点的边界内的所有点。该点的边界内的所有点。多边形的扫描转换多边形的扫描转换 从多边形从多边形顶点表示顶点表示到到点阵表示点阵表示的转换。的转换。顶点表示顶点表示:用多边形的顶点序列来刻划多边形。用多边形的顶点序列来刻划多边形。点点阵阵表表示示:用用位位于于多多边边形形内内的的象象素素的的集集合合来来刻刻划多边形。划多边形。x-扫描线算法扫描线算法基本思想基本思想用水平扫描线扫描填充多边形区域算法步骤:算法步骤:(1)(1)确确定定多多边边形形所所占占有有的的最最大大扫扫描描线线数数,得得到到多边形顶点的最小和最大多边形顶点的最小和最大y y
17、值(值(y yminmin和和y ymaxmax)。)。(2)(2)从从y=yy=yminmin到到y=yy=ymaxmax,每每次次用用一一条条扫扫描描线线进进行行填充。填充。(3)(3)对一条扫描线填充的过程可分为四个步骤:对一条扫描线填充的过程可分为四个步骤:a.a.a.a.求交求交求交求交 b.b.b.b.排序排序排序排序c.c.c.c.交点配对交点配对交点配对交点配对 d.d.d.d.区间填色区间填色区间填色区间填色存存在在问问题题:当扫描线与多边形顶点相交时,交点的取舍问题。解决解决:当扫描线与多边形的顶点相交时,当扫描线与多边形的顶点相交时,若若共共享享顶顶点点的的两两条条边边分
18、分别别落落在在扫扫描描线线的的两两边边,交点只算一个;交点只算一个;若若共共享享顶顶点点的的两两条条边边在在扫扫描描线线的的同同一一边边,这这时交点作为零个或两个。时交点作为零个或两个。011110222改进的有效边表算法(改进的有效边表算法(Y连贯性算法)连贯性算法)改进原理改进原理:处理一条扫描线时,仅对有效边求交利用扫描线的连贯性利用多边形边的连贯性有有效效边边:指指与与当当前前扫扫描描线线相相交交的的多多边边形形的的边边,也称为活性边。也称为活性边。有有效效边边表表:把把有有效效边边按按与与扫扫描描线线交交点点x x坐坐标标递递增增的的顺顺序序存存放放在在一一个个链链表表中中,此此链链
19、表表称称为为有效边表。有效边表。有效边表的每个结点有效边表的每个结点:x ymax 1/k next x ymax 1/k next边表的构造:边表的构造:(1)(1)首首先先构构造造一一个个纵纵向向链链表表,链链表表的的长长度度为为多多边边形形所所占占有有的的最最大大扫扫描描线线数数,链链表表的的每每个个结结点点称称为为一一个个桶桶,对对应应多多边边形形覆覆盖盖的的每每一一条条扫扫描线。描线。(2)(2)将将每每条条边边的的信信息息链链入入与与该该边边最最小小y y坐坐标标(y ymin min)相相对对应应的的桶桶处处。即即:若若某某边边的的较较低低端端点为点为y yminmin,则该边就
20、放在相应的扫描线桶中。,则该边就放在相应的扫描线桶中。(3)(3)每条边的数据形成一个结点,内容包括:每条边的数据形成一个结点,内容包括:该扫描线与该边的初始交点该扫描线与该边的初始交点x x(即较低端点(即较低端点的的x x值),值),1/k1/k,以及该边的最大,以及该边的最大y y值值y ymaxmax。x|x|ymin ymin y ymax max 1/k NEXT1/k NEXT(4)(4)同一桶中若干条边按同一桶中若干条边按X|X|yminymin由小到大排序,由小到大排序,若若X|X|ymaxymax 相等,则按照相等,则按照1/k1/k由小到大排序。由小到大排序。解决顶点交点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 教案 基本 图形 生成 算法
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内