文档详情

计算机图形学复习之主要算法与公式.doc

发布:2017-01-06约6.5千字共8页下载文档
文本预览下载声明
中点画线法算法步骤: 0≤k≤1时中点画线法的算法步骤为: 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、d=0.5-k、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。否则结束。 改进:用2d△x代替d 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、d=△x-2△y、x=x0、y=y0。 3.绘制点(x,y)。判断d的符号。 若d0,则(x,y)更新为(x+1,y+1),d更新为 d+2△x-2△y; 否则(x,y)更新为(x+1,y), d更新为d-2△y。 4.当直线没有画完时,重复步骤3。否则结束。 Bresenham算法步骤: 算法步骤: 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、d=0、x=x0、y=y0。 3.绘制点(x,y)。 4.d更新为d+k,判断d的符号。若d0.5,则(x,y)更新为(x+1,y+1),同时将d更新为d-1;否则(x,y)更新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。 改进算法步骤: 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、e=-△x、x=x0、y=y0。 3.绘制点(x,y)。 4.e更新为e+2△y,判断e的符号。若e0,则(x,y)更新为(x+1,y+1),同时将e更新为e-2△x;否则(x,y)更新为(x+1,y)。 5.当直线没有画完时,重复步骤3和4。否则结束。 中点画圆法: 改进:用d-0.25代替d 算法步骤: 1.输入圆的半径R。 2.计算初始值d=1-R、x=0、y=R。 3.绘制点(x,y)及其在八分圆中的另外七个对称点。 4.判断d的符号。若d≤0,则先将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。否则结束。 椭圆中点画法: 算法步骤: 1.输入椭圆的长半轴a和短半轴b。 2.计算初始值d=b2+a2(-b+0.25)、x=0、y=b。 3.绘制点(x,y)及其在四分象限上的另外三个对称点。 4.判断d的符号。若d≤0,则先将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)a2(y-0.5)时,重复步骤3和4。否则转到步骤6。 6.用上半部分计算的最后点(x,y)来计算下半部分中d的初值: 7.绘制点(x,y)及其在四分象限上的另外三个对称点。 8.判断d的符号。若d≤0,则先将d更新为b2(2xi+2)+a2(-2yi+3),再将(x,y)更新为(x+1,y-1);否则先将d更新为d+a2(-2yi+3),再将(x,y)更新为(x,y-1)。 9.当y0时,重复步骤7和8。否则结束。 多边形的扫描转换 x-扫描线算法 算法步骤: (1)确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin和ymax)。 (2)从y=ymin到y=ymax,每次用一条扫描线进行填充。 (3)对一条扫描线填充的过程可分为四个步骤: a.求交 b.排序 c.交点配对 d.区间填色 当扫描线与多边形的顶点相交时, 若共享顶点的两条边分别落在扫描线的两边,交点只算一个; 若共享顶点的两条边在扫描线的同一边,这时交点作为零个(两边顶点均在下方)或两个(均在上方)。 改进的扫描线(有效边)算法(活性边表法) 边表的构造: (1)首先构造一个纵向链表,链表的长度为多边形所占有的最大扫描线数,链表的每个结点,称为一个桶,则对应多边形覆盖的每一条扫描线。 (2)将每条边的信息链入与该边最小y坐标(ymin )相对应的桶处。也就是说,若某边的较低端点为ymin,则该边就放在相应的扫描线桶中。 (3)每条边的数据形成一个结点,内容包括:该扫描线与该边的初始交点x(即较低端点的x值),1/k,以及该边的最大y值ymax。 x|ymin ymax 1/k NEXT (4)同一桶中若干条边按X|ymin由小到大排序,若X|ymax 相等,则按照1/m由小到大排序。 算法步骤: (1)初始化:构造边表,AET表置空; (2)将第一个不空的ET表中的边与AET表合并; (3)由AET表中取出交点对进行填充。填充之后删除y=ym
显示全部
相似文档