资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第二章 基本图形生成,基本图形生成:将用参数定义平面图形元素转换为点阵,确定出图形元素在点阵平面上对应全部点。,平面上图形元素分为三类:点、线、面。,点:无需生成,能够直接按坐标值输出到图形设备上,点输出是任何点阵图形设备所具备基本功效,也是其它图形元素输出基础。,线:直线、圆周线、椭圆周线、二次曲线、三次曲线。,面:多边形,圆、椭圆及任意封闭区域。,1/26,例2 (1,1)-(9,6)直线点阵,2/26,例3 (1,1)-(6,9)直线点阵,3/26,例4 (2,3)-(8,7)直线点阵,4/26,数值微分法计算步骤:,对给定两个直线端点(,x,1,y,1,),(,x,2,y,2,),有:,x,2,x,1,,|,x,2,x,1,|,y,2,y,1,|。,(1)求得两点连线斜率:,k,(,y,2,y,1,)/(,x,2,x,1,),(2),px,1,x,1,,,py,1,y,1,,得直线上点(,px,1,py,1,);令,i,1;,(3)若,px,i,x,2,,则计算结束;不然,继续;,(4),px,i,+1,px,i,1,,py,i,+1,py,i,k,,得直线上点(,px,i,+1,int(,py,i,+1,+0.5);,(5)令,i,i,1,转到(3)。,5/26,作业:,(1)用直线方程法生成(1,3),(4,9)之间直线。写出计算过程并画出点阵图。,(2)用数值微分法生成(2,3),(9,7)之间直线。写出计算过程并画出点阵图。,(3)写出,y,2,y,1,,|,y,2,y,1,|,x,2,x,1,|情况下,数值微分法计算步骤。,6/26,直线斜率0,k,1时,两个可能下一点,7/26,理想点与两个候选点差值,8/26,Bresenham计算步骤:,给定直线两个端点(,x,1,y,1,),(,x,2,y,2,),有:,x,2,x,1,,,y,2,y,1,,,x,2,x,1,y,2,y,1,(1)求得,x,x,2,x,1,,,y,y,2,y,1,c,1,2,y,2,x,,,c,2,2,y,(2)取,px,1,x,1,,,py,1,y,1,,得点(,px,1,,,py,1,);,求得,d,1,2,y,x,,令,k,1;,(3)若,px,k,x,2,,结束;不然,继续;,(4)取,px,k,+1,px,k,1,若:,d,k,0,则:,py,k,+1,py,k,1,,d,k,+1,d,k,c,1,不然:,py,k,+1,py,k,,,d,k,+1,d,k,c,2,得点(,px,k,+1,,,py,k,+1,);,(5)令,k,k,1,转到(3)。,9/26,(2,2)-(5,7)直线点阵,10/26,作业:,(1)用Bresenham算法生成(2,4),(8,8)之间直线。写出计算过程并画出点阵图。,(2)用Bresenham算法生成(3,2),(7,8)之间直线。写出计算过程并画出点阵图。,(3)写出陡峭向上Bresenham画线函数void DrawLine2()。,(4)写出陡峭向下Bresenham画线算法计算步骤。,11/26,12/26,半径为51/8圆周点,13/26,用镜像关系生成其它7个点,14/26,半径为5完整圆,15/26,作业:,(1)对圆心为原点,半径为7圆,生成其1/8圆弧段上点。,(2)写出完整Bresenham画圆算法计算步骤(圆心为(,x,0,y,0,),半径为,r,,生成圆周上全部点),(3)对圆心为(2,5),半径为6圆,生成全部圆周点。,(4)写出Bresenham算法完整画圆程序:,DrawCricle(int x0,int y0,int r),16/26,多边形填充边点配对算法:,(1)依次生成多边形各条边线上点;,(2)将各点按y、x进行排序;,(3)将各点依次两两配对形成多边形内全部扫描线段。,17/26,18/26,19/26,作业:,(1)对圆心为(2,5)半径为6圆进行填充。首先给出全部圆周点,然后给出填充圆全部扫描线段。,(2)尝试写出圆填充程序。,(3)写出八联通区域种子填充程序。,20/26,点裁剪:,待裁剪点为(,x,y,)。裁剪窗口各边线坐标值为:,上边线WTop,下边WBottom,左边WLeft,右边WRight。,若:WLeft,x,WRight且WBottom,y,WTop,则显示该点,,不然不显示。,21/26,扫描线裁剪,:,待,输出,扫描线为,(,x,1,x,2,y,),有,x,2,x,1,,依次进行以下处理:,若,y,WTop或,y,WBottom,则全不显示,结束;,若,x,2,WRight,则全不显示,结束;,若,x,1,WLeft且,x,2,WRight,则全显示,结束;,若,x,1,WRight,则,x,2,=WRight;输出,(,x,1,x,2,y,)。,22/26,直线,裁剪,情况:,23/26,端点编码9种结果:,24/26,直线编码裁剪算法,处理步骤:,若两个端点编码均为,0,则两个端点均位于窗口内,线段全显示,结束;,将两个端点编码编码按位与,若结果不为0,则线段必定位于某条边线之外,线段全不显示,结束;,(这时,某个端点必定存在为1位,且另一个端点对应位为0,线段将部分显示或全不显示)则,对任一个存在1位端点,用1位所对应边,将直线段分割为两段,舍弃位于边线外段,对边线内段再按本规则进行处理。,25/26,作业:,用窗口(5,10,25,30),对直线(0,40)-(30,15)进行裁剪,写出处理过程及结果。,26/26,
展开阅读全文