图形学复习题答案.docx
- 文档编号:30747682
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:42
- 大小:2.53MB
图形学复习题答案.docx
《图形学复习题答案.docx》由会员分享,可在线阅读,更多相关《图形学复习题答案.docx(42页珍藏版)》请在冰豆网上搜索。
图形学复习题答案
图形学复习题(dhw)
1.设由5个顶点V1,V2,V3,V4,V5依次构成一个平面多边形P,顶点用structPoint3D{floatx,y,z;}类型的变量表示,请写出绘制该多边形的的OpenGL代码片段。
答:
glBegin(GL_POLYGON);
glVertex3f(V1.x,V1.y,V1.z);
glVertex3f(V2.x,V2.y,V2.z);
glVertex3f(V3.x,V3.y,V3.z);
glVertex3f(V4.x,V4.y,V4.z);
glVertex3f(V5.x,V5.y,V5.z);
glEnd();
2.设一个显示屏幕的分辨率是1024*768,而屏幕上每个像素的颜色由(r,g,b,a)构成,其中每个成员成为占据8位,问一个颜色FrameBuffer至少占用多少字节的显存?
答:
显存容量=显示分辨率×颜色位数/8bit=1024*768*4*8/8=3MB
3.什么叫扫描转换(Scan)?
叙述
1)扫描转换线段的中点算法的原理。
2)扫描转换多边形的扫描线算法的原理。
答:
扫描转换是指完成从图元的参数表示形式(由图形软件包的使用人员指定)到点阵表示形式(光栅显示系统刷新时所需的表示形式)的转换。
1)中点算法原理:
假定直线斜率0 设M为中点,Q为交点。 构造判别式: d=F(M)=F(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5)+c 当M在Q的下方,P2离直线更近,取P2; 当M在Q的上方,P1离直线更近,取P1; 当M与Q重合,P1、P2任取一点。 假设直线方程为: ax+by+c=0 其中a=y0-y1,b=x1-x0,c=x0y1-x1y0 由常识知: 所以欲判断M点是在Q点上方还是在Q点下方,只需把M代入F(x,y),并检查它的符号。 若d0,M在直线上方,取P1;此时再下一个像素的判别式为 d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)+c =a(xp+1)+b(yp+0.5)+c+a=d+a;增量为a 若d<0,M在直线下方,取P2;此时再下一个像素的判别式为 d2=F(xp+2,yp+1.5)=a(xp+2)+b(yp+1.5)+c =a(xp+1)+b(yp+0.5)+c+a+b=d+a+b;增量为a+b 画线从(x0,y0)开始,d的初值 d0=F(x0+1,y0+0.5)=a(x0+1)+b(y0+0.5)+c=F(x0,y0)+a+0.5b=a+0.5b 由于只用d的符号作判断,为了只包含整数运算,可以用2d代替d来摆脱小数,提高效率。 2)多边形的扫描线算法: 基本原理: 一条扫描线与多边形的边有偶数个交点 找到多边形额最小y值和最大y值,然后用范围内的每一条水平线与多边形相交再绘制线段。 步骤(对于每一条扫描线): (1)求交点 (2)交点排序 (3)交点配对,填充区段。 边的连贯性: 第一类交点: 新出现的边与扫描线的交点 第二类交点: 位于同一条边上的后继交点 边的分类表(ET) 按照边的下端点y坐标对非水平边进行分类的指针数组,下端点y坐标值等于i的边属于第i类。 边的分类表的作用是避免盲目求交。 当处理一条扫描线时,为了求出它与多边形边的所有交点,必须将它与所有的边进行求交测试。 而实际上只有某几条边与该扫描线有交点。 边的分类表正是用来排除不必要的求交测试的。 活性边: 与当前扫描线相交的边。 按交点x的增量顺序存放在一个链表中;该链表称作活性边表(AEL)。 typedefstruct{intymax; floatx,deltax; Edge*nextEdge; }Edge; AEL与ET的结点信息: ●ymax: 所交边的最高扫描线号 ●x: 当前扫描线与边的交点的x坐标 ●△x: 边的斜率的倒数 4.一个线段的两个端点的坐标分别是(1,2)和(7,5),请给出 1)用DDA算法扫描转换的过程描述 2)用中点算法扫描转换的过程描述 答: (1)DDA算法: 原理: 假定直线的起点、终点分别为: (x0,y0),(x1,y1),且都为整数。 基本思想 已知过端点P0(x0,y0),P1(x1,y1)的直线段L: y=kx+b, 则直线斜率为 计算yi+1=kxi+1+b=kxi+b+kx=yi+kx 当x=1;yi+1=yi+k 即: 当x每递增1,y递增k(即直线斜率);上述分析的算法仅适用于k≤1的情形。 在这种情况下,x每增加1,y最多增加1;当k1时,必须把x、y地位互换。 斜率k=1/3 xint(y+1/3)y+k 02 122+1/3=7/3 227/3+1/3=8/3 338/3+1/3=3 433+1/3=10/3 5310/3+1/3=11/3 6411/3+1/3=4 (2)中点算法: 原理见3 (1)题 a=y0-y1=-2b=x1-x0=6 d0=a+0.5b=1d1=a=-2d2=a+b=4 ixiyid 1021 212-1 3233 4331 543-1 6543 7641 5.对斜率在(-1,0)之间的线段,推导中点扫描转换算法的判别式的递推公式 答: 假定直线斜率-1 设M为中点,Q为交点。 当M在Q的下方,P2离直线更近,取P2; 当M在Q的上方,P1离直线更近,取P1; 当M与Q重合,P1、P2任取一点。 假设直线方程为: ax+by+c=0 其中a=y0-y1,b=x1-x0,c=x0y1-x1y0 由常识知: 所以欲判断M点是在Q点上方还是在Q点下方,只需把M代入F(x,y),并检查它的符号。 构造判别式: d=F(M)=F(xp+1,yp-0.5)=a(xp+1)+b(yp-0.5)+c 若d0,M在直线上方,取P1;此时再下一个像素的判别式为 d1=F(xp+2,yp-0.5)=a(xp+2)+b(yp-0.5)+c =a(xp+1)+b(yp-0.5)+c+a=d+a;增量为a 若d<0,M在直线下方,取P2;此时再下一个像素的判别式为 d2=F(xp+2,yp-1.5)=a(xp+2)+b(yp-1.5)+c =a(xp+1)+b(yp-0.5)+c+a-b=d+a-b;增量为a-b 画线从(x0,y0)开始,d的初值 d0=F(x0+1,y0-0.5)=a(x0+1)+b(y0-0.5)+c=F(x0,y0)+a-0.5b=a-0.5b 6.给出扫描转换多边形的扫描线算法对下图扫描转换的边表以及扫描转换过程的活动边表的变化过程。 答: 7.请叙述边界填充(BoundaryFill)和泛滥填充(FloodFill)的基本原理基于两者之间的区别。 答: 边界填充算法的基本原理是: 从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止。 如果边界是以一种颜色指定的,则边界填充算法可逐个像素地处理直到遇到边界颜色为止。 泛滥填充算法的基本原理是: 从种子出发,逐个像素地向外处理,用填充色来替换具有内部颜色的各像素。 区别: 开始的像素点不同,边界填充算法的出发点不固定,而泛滥填充算法则是固定地从种子出发。 种子填充算法要求区域是连通的,假设多边形区域内至少有一个像素已知。 8.为什么要研究基于窗口对线段进行裁剪的算法? 线裁剪典型的算法有哪些? 答: 直线是图形系统中使用最多的一个基本元素,裁剪是从数据集合中抽取信息的过程,是许多图形操作的基础。 基于窗口对线段进行裁剪的算法是计算机图形学中的基础算法之一。 线裁剪典型的算法有Cohen-Sutherland、梁-Barsky线裁剪算法、中点分割算法、Sobkow-Pospisil-Yang算法和Nicholls-Lee-Nicholl算法等。 9.简述Cohen-Sutherland或梁-Barsky线裁剪算法原理. 答: Cohen-Sutherland算法基本原理: 设裁剪矩形框的左下角和右上角顶点分别为(xmin,ymin)、(xmax,ymax) 每条线段的端点都赋以四位二进制码D3D2D1D0,称为区域码,用来标识出端点相对于裁剪矩形边界的位置。 编码规则如下: 若x 若x>xmax,则D1=1,否则D1=0; 若y 若y>ymax,则D3=1,否则D3=0。 区域码的各位指出端点对于裁剪窗口的四个相对坐标位置: 左、右、下、上。 将区域码各位从右到左编号,则坐标区域与各位的关系为: 位1: 左、位2: 右、位3: 下、位4: 上。 任何位赋值为1,代表端点落在相应的位置上,否则该位置为0。 裁剪一条线段时,先求出端点p1和p2的编码code1和code2,然后进行处理: (1)若code1|code2=0,对直线段应截取。 (2)若code1&code2≠0,对直线段可丢弃。 这是因为若code1和code2经按位与运算后的结果不为0,说明两个端点同在窗口的上方、下方、左方或右方。 (3)若上述两条件均不成立。 则需求出直线段与窗口边界的交点。 在交点处把线段一分为二,其中必有一段完全在窗口外,可以弃之。 再对另一段重复进行上述处理,直到该线段完全被舍弃或者找到位于窗口内的一段线段为止。 对于端点坐标为(x1,y1)和(x2,y2)的直线,与左、右边界交点的y坐标可以这样计算: 其中,x为xmin或xmax,线段的斜率为: 与上、下边界交点的x坐标可以这样计算: 其中,y为ymin或ymax. 梁-Barsky线裁剪算法原理: 设要裁剪的线段是P0P1。 P0P1和窗口边界交于A、B、C、D四点,见图。 算法的基本思想是从A、B和P0三点中找出最靠近的P1点,图中要找的点是P0。 从C、D和P1中找出最靠近P0的点。 图中要找的点是C点。 那么P0C就是P0P1线段上的可见部分。 线段的参数表示 x=x0+t△x y=y0+t△y0<=t<=1 △x=x1-x0△y=y1-y0 窗口边界的四条边分为两类: 始边和终边。 求出P0P1与两条始边的交点参数t0,t1,令ta=max(t0,t1,0),则ta即为三者中离P1最近的点的参数; 求出P0P1与两条终边的交点参数t2,t3,令tb=min(t2,t3,1),则tb即为三者中离P0最近的点的参数; 若tb>ta,则可见线段区间[ta,tb]。 始边和终边的确定及交点计算: 令QL=-△xDL=x0-xL QR=△xDR=xR-x0 QB=-△yDB=y0-yB QT=△yDT=yT-y0 交点为ti=Di/Qii=L,R,B,T Qi<0ti为与始边交点参数 Qi>0ti为与终边交点参数 Qi=0时 若Di<0时,线段不可见 (如图中AB,有QR=0,DR<0) 若Di>0时,分析另一D (如图中的EF就是这种情况,它使QL=0,DL>0和QR=0,DR>0。 这时由于EF和x=xL及x=xR平行,故不必去求出EF和x=xL及x=xR的交点,而让EF和y=yT及y=yB的交点决定直线段上的可见部分) 10.窗口左下角和右上角的坐标分别为(2,3)和(9,6),给出梁-Barsky算法(或编码算法)裁剪线段(1,12)和(10,4)的过程及结果 答: 用Cohen-Sutherland算法: 设P1为(1,12),P2为(10,4),斜率k=(4-12)/(10-1)=-8/9 P1编码code1=1001,P2编码code2=0010,code1|code2=1011,code1&code=0. 求出P1P2与左边界的交点是P3(2,100/9),P1P3在裁剪框外,去掉,用P3替代P1,P3的编码code1=1000, P3编码code1=1000,P2编码code2=0010,code1|code2=1010,code1&code=0. 求出P3P2与右边界的交点是P4(9,44/9),P2P4在裁剪框外,去掉,用P4代替P2,P4编码code2=0000, P3编码code1=1000,P4编码code2=0000,code1|code2=1000,code1&code=0. 因为P3、P4均在下边界之上,所以,与下边界没有交点。 求出P3P4与上边界的交点是P5(7.75,6),P3P5在裁剪框外,去掉,用P5代替P1,P5编码code1=0000, P5编码code1=0000,P4编码code2=0000,code1|code2=0000,所以,最终所取的线段就是P5P4,其坐标为别为(7.75,6)、(9,44/9)。 用梁-Barsky算法: 初始u1=1,u2=0 Δx=x2-x1=9 Δy=y2-y1=-8 对于左边界: p1=Δx=9>0 q1=x1-xmin=1-2=-1 r1=q1/p1=-1/9 u2=min(0,r1,u2)=-1/9 对于右边界: p2=-Δx=-9<0 q2=xmax-x1=9-1=8 r2=q2/p2=-8/9 u1=max(1,r2,u1)=1 对于下边界: p3=-Δy=8>0 q3=y1-ymin=12-3=9 r3=q3/p3=9/8 u2=min(1,r3,u2)=-1/9 对于上边界: p4=Δy=-8<0 q4=ymax-y1=6-12=-6 r4=q4/p4=3/4 u1=max(0,r4,u1)=3/4 xnew1=x1+Δx*u1=1+9*3/4=31/4 ynew1=y1+Δy*u1=12+(-8)*3/4=6 xnew2=x2+Δx*u2=10+9*(-1/9)=9 ynew2=y2+Δy*u2=4+(-8)*(-1/9)=44/9 所以所取的线段端点坐标为(7.75,6,)、(9,44/9)。 11.Sutherland-Hodgman算法的窗口能否推广到一般的(凸或凹)多边形? 为什么? 答: 该方法可以推广到任意凸多边形裁剪窗口,而凹多边形裁剪窗口不行,因为被裁剪的多边形在裁剪窗口的一条边界及其延长线的两侧可能都有在裁剪窗口内侧和外侧的部分,内外侧难以确定,所以不适用。 12.叙述Sutherland-Hodgman算法裁剪多边形的原理。 对下图给出其裁剪过程的示意图。 答: Sutherland-Hodgman算法原理: 该算法的基本思想是每次用窗口的一条边界及其延长线来裁剪多边形的各边。 多边形通常由它的顶点序列来表示,经过裁剪规则针对某条边界裁剪后,结果形成新的顶点序列,又留待下条边界进行裁剪,…,直到窗口的所有边界都裁剪完毕,算法形成最后的顶点序列,才是结果多边形(它可能构成一个或多个多边形)。 当多边形一个顶点Pi相对于窗口某条边界及其延长线进行剪裁时,不外乎下列四种情况(即裁剪规则): 1、顶点Pi在内侧,前一顶点Pi-1也在内侧,则将Pi纳入新的顶点序列; 2、顶点Pi在内侧,前一顶点Pi-1在外侧,则先求交点Q,再将Q、Pi依次纳入新的顶点序列; 3、顶点Pi在外侧,前一顶点Pi-1在内侧,则先求交点Q,再将Q纳入新的顶点序列; 4、顶点Pi与前一顶点Pi-1均在外侧,则顶点序列中不增加新的顶点。 设ab与左边交点为P1,bc与左边交点为P2,cd与右边交点为P3,de与右边交点为P4,ef与右边交点为P5,ab与右边交点为P6,bc与下边交点P7,cd与下边交点P8,矩形框右上顶点P9,ab与上边交点P10 L(a) R(P1) B(P2) T(P7) P7P2P1P10P9P5eP4P3P8 13.给出Weiler-Atherton算法得到A-B的跟踪过程及结果 答: 给出Weiler-Atherton算法原理: 假设被裁剪多边形和裁剪窗口的顶点序列都按逆时针方向排列。 当两个多边形相交时,交点必然成对出现,其中一个是从被裁剪多边形进入裁剪窗口的交点,称为“入点”,另一个是从被裁剪多边形离开裁剪窗口的交点,称为“出点”。 算法从被裁剪多边形的一个顶点开始,碰到出点,沿着裁剪窗口按逆时针方向搜集顶点序列; 而当遇到入点时,则沿着被裁剪多边形按逆时针方向搜集顶点序列。 按上述规则,如此交替地沿着两个多边形的边线行进,直到回到起始点。 这时,收集到的全部顶点序列就是裁剪所得的一个多边形。 14.举例说明什么叫齐次(Homogeneous)坐标? 为什么要引入齐次坐标? 答: 齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。 (x,y)点对应的齐次坐标为,。 显然一个向量的齐次表示是不唯一的,齐次坐标的h取不同的值都表示的是同一个点,比如齐次坐标[8,4,2]、[4,2,1]表示的都是二维点[4,2]。 引进齐次坐标的原因: 许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。 以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为p'=m1*p+m2(m1旋转缩放矩阵,m2为平移矩阵,p为原向量,p'为变换后的向量)。 引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为p'=M*p的形式。 即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。 15.给出关于直线y=x+2的镜像变换的坐标变换矩阵表示。 答: = 16.给出关于点(3,4)逆时针旋转45度的坐标变换矩阵表示。 答: T2•R•T1 = 17.给出OpenGL库的gluLookAt(eyeX,eyeY,eyeZ,centerX,centerY,centerZ,upX,upY,upZ)所确定的从世界坐标系到观察坐标系的变换的矩阵表示。 答: 9个参数的意思分别是: eyex,eyey,eyez指定视点的位置centerx,centery,centerz指定参考点的位置upx,upy,upz指定视点向上的方向 z[0]=eyex-centerx;z[1]=eyey-centery;z[2]=eyez-centerz; a=sqrt(z[0]*z[0]+z[1]*z[1]+z[2]*z[2]); z[0]/=a;z[1]/=a;z[2]/=a; y[0]=upx;y[1]=upy;y[2]=upz; x[0]=y[1]*z[2]-y[2]*z[1]; x[1]=-y[0]*z[2]+y[2]*z[0]; x[2]=y[0]*z[1]-y[1]*z[0]; b=sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]); x[0]/=b;x[1]/=b;\x[2]/=b; y[0]=z[1]*x[2]-z[2]*x[1]; y[1]=-z[0]*x[2]+z[2]*x[0]; y[2]=z[0]*x[1]-z[1]*x[0]; c=sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]); y[0]/=c;y[1]/=c;y[2]/=c; m[0][0]=x[0];m[0][1]=x[1]; m[0][2]=x[2];m[0][3]=-x[0]*eyex-x[1]*eyey-x[2]*eyez; m[1][0]=y[0];m[1][1]=y[1]; m[1][2]=y[2];m[1][3]=-y[0]*eyex-y[1]*eyey-y[2]*eyez; m[2][0]=z[0];m[2][1]=z[1]; m[2][2]=z[2];m[2][3]=-z[0]*eyex-z[1]*eyey-z[2]*eyez; m[3][0]=0;m[3][1]=0;m[3][2]=0;m[3][3]=1; 18.投影根据投影中心(Centerofprojection)离物体的远近分为哪两类? 什么叫透视投影? 什么叫灭点(vanishingpoints)? 透视投影的灭点数目有多少? 答: 投影根据投影中心离物体的远近分中心投影和平行投影。 透视投影: 是指用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。 灭点: 是指立体图形各点延伸线向消失延伸的相交点。 透视点的消失点。 透视投影的灭点数目有无穷多个。 19.简述物体从其自身坐标系直至在二维屏幕上显示这一绘制管道线Pipeline所经过的一系列变换有哪些? 答: 有物体坐标系到世界坐标系的转换、世界坐标系到观察坐标系的转换、观察坐标系到投影坐标系的转换、投影坐标系到屏幕坐标系的转换。 20.结合例子说明什么叫曲线曲面的参数表示? 答: 曲线的参数表示: 在平面曲线的参数表示中,曲线上每一点的坐标均要表示成一个参数形式,参数表示的一般形式为: x=x(t),y=y(t) 曲线上点矢量表示为: P(t)=[x(t),y(t)] 例如: 通过两点p1(x1,y1)和p2(x2,y2)的直线段参数方程表示为: p(t)=p1+(p2-p1)t,其中t∈[0,1],p(t)=[x(t),y(t)],p1=[x1,y1],p2=[x2,y2];即x(t)=x1+(x2-x1)t,y(t)=y1+(y2-y1)t 曲面的参数表示: 曲面是由曲面片拼合而成的。 一个曲面片是以曲线为边界的点的集合。 在三维空间中,点的坐标(x,y,z)可用双参数的单值函数来表示,即: x=x(u,w),y=y(u,w),z=z(u,w) 曲面片可用三次参数方程来表示为: 其中u,w∈[0,1] 例如: Bezier曲面片是由特征多面体的顶点来决定的,其数学表示式如下: ,u,w∈[0,1] 其中,Pij是特征多面体各顶点的位置矢量,共计(m+1)×(n+1)各顶点。 Bi,m(u)和Bj,n(w)是伯恩斯坦多项式。 21.说明LaGrange插值多项式的原理 答: 设函数f(x)在区间[a,b]上连续,在给定n+1个不同节点 上的值分别为 要求构造一个不超过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 复习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)