您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 《计算机图形学》练习题(答案)
1《计算机图形学》练习题1.直线扫描转换的Bresenham算法(1)请写出生成其斜率介于0和1之间的直线的Bresenham算法步骤。(2)设一直线段的起点和终点坐标分别为(1,1)和(8,5),请用Bresenham算法生成此直线段,确定所有要绘制象素坐标。(1)输入线段的两个端点,并将左端点存储在(x0,y0)中将(x0,y0)装入帧缓存,画出第一个点计算常量∆x,∆y,2∆y,and2∆y-2∆x,并得到决策参数的第一个值:p0=2∆y-∆x④从k=0开始,在沿线路径的每个xk处,进行下列检测:如果pk0,下一个要绘制的点就是(xk+1,yk),并且pk+1=pk+2∆y否则下一个要绘制的点就是(xk+1,yk+1),并且pk+1=pk+2∆y-2∆x⑤重复步骤4,共∆x-1次(2)m=(5-1)/(8-1)=0.57x=7y=4P0=2y-x=12y=82y-2x=-6kpk(xk+1,yk+1)01(2,2)1-5(3,2)23(4,3)3-3(5,3)45(6,4)5-1(7,4)67(8,5)2.已知一多边形如图1所示,其顶点为V1、V2、V3、V4、V5、V6,边为E1、E2、E3、E4、E5、E6。用多边形的扫描填充算法对此多边形进行填充时(扫描线从下到上)要建立边分类表(sortededgetable)并不断更新活化边表(activeedgelist)。(1)在表1中填写边分类表中每条扫描线上包含的边(标明边号即可);(2)在表2中写出边分类表中每条边结构中各成员变量的初始值(3)指出位于扫描线y=6,7,8,9和10时活化边表中包含那些边,并写出这些边中的x值、ymax值、和斜率的倒数值1/m。表1边分类表x481图1多边形的边和顶点y1482356791023567910V1V2V3V4V5V6E1E2E3E4E5E62边xymax1/m41197460051976006196600711877901-1827991-193369991-13.二维变换(1)记P(xf,yf)为固定点,sx、sy分别为沿x轴和y轴方向的缩放系数,请用齐次坐标(HomogeneousCoordinate)表示写出二维固定点缩放变换的变换矩阵。(2)把以A(0,0)、B(1,1)和C(5,2)为顶点的三角形以顶点C为固定点放大2倍。求出放大后的三角形的顶点坐标。(1)(2)平移这个对象,使得他的固定点与原点重合Y值(ScanLineNumber)边(EdgeNumber)1020304E15E6,E26E67E38E5,E39E410012345678910表2边的初始值3缩放这个在坐标原点的对象平移这个对象,使得他的固定点回到原始位置1100)1(0)1(01''rryfyxfxyxsyssxsyx所以A(-5,-2)B(-3,0)C(5,2)4二维变换(1)请用齐次坐标表示写出点Q(x,y)绕定点P(a,b)旋转的旋转变换矩阵。(2)求出以A(0,0)、B(1,1)和C(5,2)为顶点的三角形绕固定点P(-1,-1)点旋转450后的三角形的顶点坐标。(1)(2)平移这个对象,使得他的固定点与原点重合旋转这个在坐标原点的对象平移这个对象,使得他的固定点回到原始位置1100sin)cos1(cossinsin)cos1(sincos1''yxxyyxyxrrrrA(-1,-1+2)B(-1,-1+22)C(-1+3/2*2,-1+9/2*2)5.如图所示,L(-3,1)和R(2,6)为正方形裁剪窗口两个对角线角点,线段AB、CD、EF、GH和IJ为被裁剪线段。用Cohen-Sutherland线裁剪算法进行裁剪时要对线段的端点进行编码。(1)请写出编码规则,并在图中标出相应区域的编码(2)分别指出于点A、B、C、D、E、F、G、H对应的编码(3)根据线段端点的编码对图中所有线段分类,指出哪些线段是可见的?哪些是不可见的?哪些是候选的裁剪线段。x’=xr+(x-xr)cosθ-(y-yr)sinθy’=yr+(x-xr)sinθ+(y-yr)cosθ4(1)100110001010000100000010010101000110(2)A:0001B:1000C:0000D:1010E:0000F:0000G:0100J(-2,10)11L(-3,1)3-1-1R(2,6)A(-4,2)B(-1,7)C(-1,5)D(3,8)E(-2,3)F(1,2)G(1,-2)H(3,3)I(-4,7)5H:0010I:1000J:1000(3)可见的:EF不可见的:GH,IJ候选的:AB,CD6.分别用Sutherland-Hodgman算法和Weiler-Atherton算法裁剪图1所示的多边形p1p2p3p4p5p6p7p8p9p1,裁剪窗口为如图所示的矩形窗口。要求:(1)用实线分别在图1(a)(b)(c)(d)中绘出用Sutherland-Hodgman算法沿裁剪窗口的左、右、上、下窗口边裁剪后的中间结果(2)用Weiler-Atherton算法对图1所示的多边形进行裁剪,以p1为起点,以图1箭头所示的方向为走向,在图1(e)中用箭头表示画出所有走过的边(包括多边形边和窗口边)及其走向;并在图1(f)中用实线绘出最后裁剪结果。图1多边形裁剪P1P2P3P4P5P6P7P8P9图1(a)P1P2P3P4P5P6P7P8P9图1(b)P1P2P3P4P5P6P7P8P9图1(c)P1P2P3P4P5P6P7P8P9图1(d)P1P2P3P4P5P6P7P8P967.简述多边形扫描填充算法基本原理和大致步骤,并以具体例子说明边分类表内容、扫描过程中活化边表的信息变化。(1)原理:在直角坐标系中,假设有一条从左至右的扫描线穿过多边形,从左至右开始计数,与多边形交点为奇数时,开始进入多边形,与多边形交点为偶数时,走出多边形。这样在这相邻配对的奇偶交点间的所有象素都在多边形内。如图,奇数交点a,c,都是入多边形,偶数交点b,d都是走出多边形,相邻的奇偶交点配对,a,b之间,c,d之间的象素都多边形内,可见一条扫描线上,与多边形交点个数需要为偶数。依据这样的思路,扫描线从上到下从左到右依次扫过多边形即可求得多边形所占据的象素。(注意退化情况的处理,也就是扫描线刚好经过顶点或者多边形的边本身就是水平的情况)(2)步骤:1)输入多边形的顶点的坐标2)建立边表(ET)3)初始化Y值4)初始化活性边表(AEL),设置为空5)每个扫描线从底部到顶部,做以下步骤直到ET和AEL是空的:建立AEL设置颜色更新AEL:图1(e)P1P2P3P4P5P6P7P8P9图1(f)P1P2P3P4P5P6P7P8P97当Y=YMAX时,删除边x=x+∆XY=y+1④返回AEL(3)例子:88.由坐标A(0,0,0),B(1,0,0),C(0,1,0),D(0,01)确定的锥体绕直线L旋转450,其中L的方向为V=J+K,且通过点C(0,1,0)。写出锥体旋转后的坐标。9.设3次参数多项式函数P(u)=au3+bu2+cu+d,求出满足下列边界条件的3次Hermite插值曲线(用矩阵表示):P(0)=PkP(1)=Pk+1P’(0)=DPkP’(1)=DPk+110.Cohen-Sutherland直线段裁剪算法和Liang-Barsky直线段裁剪算法是直线段裁剪的两种基本算法,试述两种算法的基本原理,并分析它们的优点和不足。(1)通过一个矩形的裁剪区域将整个屏幕分成9个部分,并为每一个部分赋予相应的区域码,然后根据端点的位置确定这个端点的区域码。先判断能否完全接受或者完全排除一条线段,若以上2个判断无法直接得出,则逐步裁剪,选取一个位于裁剪区外的端点,把端点的区域码和裁剪边界的区域码进行逻辑与运算,若结果为真,则端点在该裁剪边界外部,这时将端点移向线段和该边界的交点处,如此循环,直到裁剪结束。(2)利用线段的参数表达形式直接判别落在窗口内的部分线段.大体上有以下几步,有些步骤依据中间的判断结果可以省略或跳转.第一步:计算出pk和qk(k=1,2,3,4)第二步:看pki的符号进行判断9第三步:计算u1=max(0,qk/pk),u2=min(1,qk/pk)如果,u2u1,则线段是可见的第四步:利用u1和u2计算端点坐标(3)比较:Cohen-Sutherland:直观方便,速度较快多次重复计算线段与裁剪窗口边界的交点,计算量大采用位逻辑乘,在有些高级语言中不便进行全部舍弃的判断仅适用于那些仅在窗口的线段,不适合跨越三个区域的线段,就不能一次做出判别Liang-Barsky:所需计算量小,更有效可以扩展成三维裁剪算法只能应用于矩阵窗口的情形10.简述Bezier曲线与B-Spline曲线的异同点,指出他们的特点和不足。11.DDA算法和Bresenham算法是两种直线生成的基本算法,试述两种算法的基本原理,并分析它们的优点和不足。(1)DDA算法:选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的增量为一个象素单位(△x=1),利用式(2-1)计算另一个方向的增量(△y=△x·m=m)。通过递推公式(2-2)至(2-5),把每次计算出的(xi+1,yi+1)经取整后送到显示器输出,则得到扫描转换后的直线。之所以取x2-x1和y2-y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。④另外,算法实现中还应注意直线的生成方向,以决定Δx及Δy是取正值还是负值。(2)Bresenham算法:假定直线斜率k在0~1之间。此时,只需考虑x方向每次递增1个单位,决定y方向每次递增0或1。设:直线当前点为(xi,y)直线当前光栅点为(xi,yi)则:下一个直线的点应为(xi+1,y+k)下一个直线的光栅点为右光栅点(xi+1,yi)(y方向递增量0)或为右上光栅点(xi+1,yi+1)(y方向递增量1)(3)优缺点:DDA算法:算法简单,实现容易由于在循环中涉及实型数的运算,因此生成直线的速度较慢。浮点数运算不易硬件实现Bresenham算法:不必计算直线之斜率,因此不做除法;不用浮点数,只用整数;只做整数加减法和乘2运算,而乘2运算可以用硬件移位实现.算法速度很快,并适于用硬件实现.12.简述直线段裁剪与多边形裁剪的异同点。10多边形的剪裁比直线剪裁复杂。如果按照直线剪裁算法对多边形的边作剪裁,剪裁后的多边形的边就会成为一组彼此不连贯的折线,从而给填色带来困难。多边形剪裁算法的关键在于,通过剪裁,不仅要保持窗口内多边形的边界部分,而且要将窗框的有关部分按一定次序插入多边形的保留边界之间,从而使剪裁后的多边形的边仍然保持封闭状态,以便填色算法得以正确实现13.在计算机辅助设计与图形学中,样条曲线通常采用3次多项式参数表示,请说明理由。14.图形学中消隐算法有两大类,z缓冲器(z-buffer)算法属于哪一类?请阐述它的基本原理和特点。(1)属于图像空间消隐(2)基本原理:Z缓冲器中每个单元的值是对应象素点所反映对象的z坐标值。Z缓冲器中每个单元的初值取成z的极小值,帧缓冲器每个单元的初值可放对应背景颜色的值。图形消隐的过程就是给帧缓冲器和Z缓冲器中相应单元填值的过程。在把显示对象的每个面上每一点的属性(颜色或灰度)值填入帧缓冲器相应单元前,要把这点的z坐标值和z缓冲器中相应单元的值进行比较。只有前者大于后者时才改变帧缓冲器的那一单元的值,同时z缓冲器中相应单元的值也要改成这点的z坐标值。如果这点的z坐标值小于z缓冲器中的值,则说明对应象素已经显示了对象上一个点的属性,该点要比考虑的点更接近观察点。对显示对象的每个面上的每个点都做了上述处理后,便可得到消除了隐藏面的图(3)特点:优点:(1)算法复杂度(O(
本文标题:《计算机图形学》练习题(答案)
链接地址:https://www.777doc.com/doc-5191287 .html