当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

《计算机图形学》课程教学资源:第二章 作业

资源类别:文库,文档格式:DOC,文档页数:4,文件大小:29KB,团购合买
1.用直线数值微分法扫描转换直线。写出扫描转换的结果:x,y 的坐标。
点击下载完整版文档(DOC)

1用直线数值微分法扫描转换直线。写出扫描转换的结果:xy的坐 标 ★★直线数值微分扫描直线算法(DDA)实现如下 #include #include #include maino int driver, gmode int xl, XO, yl, yo float k, dx, dy, y; driverDEtect initgraph( &driver, &gmode, c: I\tc"); printf("input xO, xl, yo, y1: n"); canf("%d, %d, %d, %d", &xo, &yO, &xl, &y 1); printf("%d %d %d%dInn,xO, yo, xl,yl) dy=(yl-yo) dx=(x1-x0), k=dy/d 0 for(x-X0 X<=X1; X+ fprintf("%d %d\n" x, (int)(y+0.5)) putpixel(x, (int)(y+0.5), BLUE); setcolor(BLUE) ★★扫描转换的结果如下: 0 x0123456789 104 2用中点画线法扫描转换直线段。要求写出每一步递推过程的ⅹy坐 标及判别式d的值

1.用直线数值微分法扫描转换直线。写出扫描转换的结果:x,y 的坐 标。 ★★直线数值微分扫描直线算法(DDA)实现如下: #include #include #include #include main() { int gdriver,gmode; int x1,x0,y1,y0; int x; float k,dx,dy,y; gdriver=DETECT; clrscr(); initgraph(&gdriver,&gmode,"c:\\tc"); printf("input x0,x1,y0,y1:\n"); scanf("%d,%d,%d,%d",&x0,&y0,&x1,&y1); printf("%d %d %d %d\n\n",x0,y0,x1,y1); dy=(y1-y0); dx=(x1-x0); k=dy/dx; y=y0; for(x=x0;x<=x1;x++) {printf("%d %d\n",x,(int)(y+0.5)); putpixel(x,(int)(y+0.5),BLUE); y=y+k;} setcolor(BLUE); } ★★扫描转换的结果如下: x y 0 0 1 0 2 1 3 1 4 2 5 2 6 2 7 3 8 3 9 4 10 4 2.用中点画线法扫描转换直线段。要求写出每一步递推过程的 x,y 坐 标及判别式 d 的值

★★中点画线扫描转换算法的实现如下 #include #include #include int xl, xO, yl, yo Int x, y, a, b, d deltal, delta2 driverDEtect corsarO initgraph(&driver, &gmode, c: I\tc"); printf("input xO, xl,yO, y1: \n"); scanf("%d, %d, %d, %d", &xo, &yo, &xl, &y 1); printf("%d %d%d%dInn,x0, yo, xl, y1); b=x1-xO delta1=2*a delta2=2*(a+b) 0 putpixel(,,YELLOW) printf("%d %d %odIn", x, y, d); if(d<o) d+=delta2 d+=deltal putpixel(x, y, YELLOW) printf("%d %d %d\n", x,y, d); ★★扫描转换的结果如下: 0

★★中点画线扫描转换算法的实现如下: #include #include #include #include main() { int gdriver,gmode; int x1,x0,y1,y0; int x,y,a,b,d,delta1,delta2; gdriver=DETECT; clrscr(); initgraph(&gdriver,&gmode,"c:\\tc"); printf("input x0,x1,y0,y1:\n"); scanf("%d,%d,%d,%d",&x0,&y0,&x1,&y1); printf("%d %d %d %d\n\n",x0,y0,x1,y1); a=y0-y1; b=x1-x0; d=2*a+b; delta1=2*a; delta2=2*(a+b); x=x0; y=y0; putpixel(x,y,YELLOW); printf("%d %d %d\n",x,y,d); while(x<x1) { if(d<0) {x++;y++; d+=delta2; } else {x++; d+=delta1; } putpixel(x,y,YELLOW); printf("%d %d %d\n",x,y,d); } } ★★扫描转换的结果如下: x y d 0 0 2 1 0 -6 2 1 6 3 1 -2

456789 2223344 2 -6 6 2 3比较多边形扫描转换与区域填充算法概念的异同,并列出常用的算 法名称 答:扫描线多边形区域填充算法是按扫描线顺序,计算扫描线与多边形的相交区间,再 用要求的颜色显示这些区间的象素,即完成填充工作。常用算法有扫描线算法和边界标志算 法。区域可采用内点表示和边界表示两种表示形式。区域填充算法在内点表示中,区域内的 所有象素着同一颜色。在边界表示中,区域的边界点着同一颜色。区域填充指先将区域的 点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。常用的算法有区域填充的递归算 法和区域填充的扫描线算法 4解释走样、反走样的概念。写出反走样的三种常用的方法。并比较 每种方法的时间、空间、图形质量的优缺点。 答:在光栅显示器上显示图形时,直线段或图形边界或多或少会呈锯齿状。原因是图形 信号是连续的,而在光栅显示系统中,用来表示图形的却是一个个离散的象素。这种用离散 量表示连续量引起的失真现象称之为走样( aliasing);用于减少或消除这种效果的技术称为反 走样( antialiasing) 反走样的三种常用的方法有:提高分辨率、区域采样和加权区域采样 提高分辨率方法是把显示器分辨率提高一倍,使得显示出的直线段看起来就平滑。这种反走 样方法是以4倍的存储器代价和扫描转换时间获得的。因此,增加分辨率虽然简单,但是时 间、空间开支过大,而且它也只能减轻而不能消除锯齿问题,图形质量不高。 区域采样方法假定每个象素是一个具有一定面积的小区域,将直线段看作具有一定宽度 的狭长矩形。当直线段与象素有交时,求出两者相交区域的面积,然后根据相交区域面积的 大小确定该象素的亮度值。相比较而言,区域采样方法时间节约开支,但在空间上没有增强 开支,而且图表质量较高 加权区域取样方法,采用离散计算方法。首先将象素均匀分割成n个子象素。则每个象 素的面积为1/n。计算每个子象素对原象素的贡献,并保存在一张二维的加权表中。然后求 出所有中心落于直线段内的子象素。最后计算所有这些子象素对原象素亮度贡献之和的值。 该值乘以象素的最大灰度值作为该象素的显示灰度值。该方法在时间上开支较小,但空间上 的开支没减少,图形质量较高 5写出五种消除隐藏面的常用方法,并比较每种算法的优缺。(从时 间、空间、图形质量三方面比较) 绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,或简称为消隐。经 过消隐得到的投影图称为物体的真实图形。 答:各种常用消除隐藏面的方法优缺点比较如下: 1)画家算法:优点是简单,容易实现,并且可以作为实现更为复杂算法的基础。它的缺 点是由于深度排序的计算量大,故时间长,且只能处理互不相交的面,而且,深度优先级中 面的顺序可能出错,图形质量可靠性较低。 2)Z缓冲区算法:算法简单,实现灵活简单,有利于硬件实现,并且图形质量较高。但是

4 2 10 5 2 2 6 2 -6 7 3 6 8 3 -2 9 4 10 10 4 2 3.比较多边形扫描转换与区域填充算法概念的异同,并列出常用的算 法名称。 答:扫描线多边形区域填充算法是按扫描线顺序,计算扫描线与多边形的相交区间,再 用要求的颜色显示这些区间的象素,即完成填充工作。常用算法有扫描线算法和边界标志算 法。区域可采用内点表示和边界表示两种表示形式。区域填充算法在内点表示中,区域内的 所有象素着同一颜色。在边界表示中,区域的边界点着同一颜色。区域填充指先将区域的一 点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。常用的算法有区域填充的递归算 法和区域填充的扫描线算法。 4.解释走样、反走样的概念。写出反走样的三种常用的方法。并比较 每种方法的时间、空间、图形质量的优缺点。 答:在光栅显示器上显示图形时,直线段或图形边界或多或少会呈锯齿状。原因是图形 信号是连续的,而在光栅显示系统中,用来表示图形的却是一个个离散的象素。这种用离散 量表示连续量引起的失真现象称之为走样(aliasing);用于减少或消除这种效果的技术称为反 走样(antialiasing)。 反走样的三种常用的方法有:提高分辨率、区域采样和加权区域采样。 提高分辨率方法是把显示器分辨率提高一倍,使得显示出的直线段看起来就平滑。这种反走 样方法是以 4 倍的存储器代价和扫描转换时间获得的。因此,增加分辨率虽然简单,但是时 间、空间开支过大,而且它也只能减轻而不能消除锯齿问题,图形质量不高。 区域采样方法假定每个象素是一个具有一定面积的小区域,将直线段看作具有一定宽度 的狭长矩形。当直线段与象素有交时,求出两者相交区域的面积,然后根据相交区域面积的 大小确定该象素的亮度值。相比较而言,区域采样方法时间节约开支,但在空间上没有增强 开支,而且图表质量较高。 加权区域取样方法,采用离散计算方法。首先将象素均匀分割成 n 个子象素。则每个象 素的面积为 1/n。计算每个子象素对原象素的贡献,并保存在一张二维的加权表中。然后求 出所有中心落于直线段内的子象素。最后计算所有这些子象素对原象素亮度贡献之和 的值。 该值乘以象素的最大灰度值作为该象素的显示灰度值。该方法在时间上开支较小,但空间上 的开支没减少,图形质量较高。 5.写出五种消除隐藏面的常用方法,并比较每种算法的优缺。(从时 间、空间、图形质量三方面比较) 绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,或简称为消隐。经 过消隐得到的投影图称为物体的真实图形。 答:各种常用消除隐藏面的方法优缺点比较如下: 1)画家算法:优点是简单,容易实现,并且可以作为实现更为复杂算法的基础。它的缺 点是由于深度排序的计算量大,故时间长,且只能处理互不相交的面,而且,深度优先级中 面的顺序可能出错,图形质量可靠性较低。 2)Z 缓冲区算法:算法简单,实现灵活简单,有利于硬件实现,并且图形质量较高。但是

需要一个深度缓存来存放每一个象素的深度值,没有充分利用图形的相关性,故时间和空间 开支也较大。 3)扫描线Z- buffer算法:在Z缓冲区算法的基础上利用相关性提高点与多边形的包含性测 式和深度计算的速度,故节省了时间开支,但空间开支没有降低 4)区间扫描算法:算法比较费时,但不需要Z缓冲区,节省空间,图形质量可靠。 5)区域子分割算法:算法在时间和空间上都有了一定的改进

需要一个深度缓存来存放每一个象素的深度值,没有充分利用图形的相关性,故时间和空间 开支也较大。 3)扫描线 Z-buffer 算法:在 Z 缓冲区算法的基础上利用相关性提高点与多边形的包含性测 试和深度计算的速度,故节省了时间开支,但空间开支没有降低。 4)区间扫描算法:算法比较费时,但不需要 Z 缓冲区,节省空间,图形质量可靠。 5)区域子分割算法:算法在时间和空间上都有了一定的改进

点击下载完整版文档(DOC)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
已到末页,全文结束
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有