计算机图形学习题及答案(共18页).doc
精选优质文档-倾情为你奉上计算机图形学作业答案第一章 序论第二章 图形系统1 什么是图像的分辨率?解答:在水平和垂直方向上每单位长度(如英寸)所包含的像素点的数目。2 计算在240像素/英寸下640×480图像的大小。解答:(640/240)×(480/240)或者(8/3)×2英寸。3 计算有512×512像素的2×2英寸图像的分辨率。解答:512/2或256像素/英寸。第三章 二维图形生成技术1 一条直线的两个端点是(0,0)和(6,18),计算x从0变到6时y所对应的值,并画出结果。解答:由于直线的方程没有给出,所以必须找到直线的方程。下面是寻找直线方程(ymxb)的过程。首先寻找斜率:m y/x (y2y1)/(x2x1) (180)/(60) 3接着b在y轴的截距可以代入方程y3xb求出 03(0)b。因此b0,所以直线方程为y3x。2 使用斜截式方程画斜率介于0°和45°之间的直线的步骤是什么?解答:(1) 计算dx:dxx2x1。(2) 计算dy:dyy2y1。(3) 计算m:mdy/dx。(4) 计算b: by1m×x1(5) 设置左下方的端点坐标为(x,y),同时将xend设为x的最大值。如果dx < 0,则xx2、yy2和xendx1。如果dx > 0,那么xx1、yy1和xendx2。(6) 测试整条线是否已经画完,如果x > xend就停止。(7) 在当前的(x,y)坐标画一个点。(8) 增加x:xx1。(9) 根据方程ymxb计算下一个y值。(10) 转到步骤(6)。3 请用伪代码程序描述使用斜截式方程画一条斜率介于45°和45°(即|m|>1)之间的直线所需的步骤。解答:假设线段的两个端点为(x1,y1)和(x2,y2),且y1<y2int x = x1, y = y1;float xf, m = (y2y1)/(x2x1), b = y1 mx1;setPixel( x, y ); /*画一个像素点*/while( y < y2 )y+;xf = ( yb)/m;x = Floor( xf +0.5 );setPixel( x, y );4 请用伪代码程序描述使用DDA算法扫描转换一条斜率介于45°和45°(即|m|1)之间的直线所需的步骤。解答:假设线段的两个端点(x1, y1)和(x2,y2),且x1<x2int x = x1, y;float yf = y1, m = ( y2 y1) / ( x2x1);while( x < = x2 )y = Floor( yf + 0.5 );setPixel( x, y );x+;yf = yf + m;5 使用Bresenham算法画斜率介于0°和45°之间的直线所需的步骤。解答:(1) 计算初始值:dx x2x1Inc2 2(dydx)dy y2y1d Inc1 dxInc1 2dy(2) 设置左下方的端点坐标为(x,y),同时将xend设为x的最大值。如果dx < 0,则xx2,yy2和xendx1。如果dx > 0, 那么xx1、yy1和xendx2。(3) 在当前的(x,y)坐标画一个点。(4) 判断整条线段是否已经画完,如果xxend就停止。(5) 计算下一像素的位置。如果d<0,那么ddInc1。如果d0,那么dd + Inc2,并且yy1。(6) 增加x:xx1。(7) 在当前的(x,y)坐标画一个点。(8) 转到步骤(4)。6 请指出用Bresenham算法扫描转换从像素点(1,1)到(8,5)的线段时的像素位置。解答:首先必须找到初始值。在这个例子中,dx x2x1 81 7dy y2y1 51 4因此,Inc1 2dy 2×4 8Inc12(dydx) 2×(47)6dInc1dx8717 使用Bresenham算法扫描转换圆的步骤是什么?解答:(1) 设置初始变量:(h,k)圆心坐标;x0;y圆的半径r;d32r。(2) 测试整个圆是否已经扫描转换完。如果x>y就停止。(3) 以中心(h,k)为对称点,对当前的(x,y)坐标画8个圆上的点:plot( x + h, y + k )plot( -x + h, -y + k )plot( y+ h, x +k )plot( -y + h, -x + k )plot( -y + h, x + k )plot( y + h, -x + k )plot( -x + h, y + k )plot( x + h, -y + k )其中plot(a,b)表示以给定的参数为中心画一个小块。(4) 计算下一个像素的位置。如果d < 0,那么dd4x6和xx1。如果d0,那么dd4(xy)10、xx+1和yy1。(5) 转到步骤(2)。8 给定数据点P0(0,0),P1(1,2)P2(2,1)P3(3,1)P4(4,10)P5(5,5),用三次B样条插值法插值这些数据点,求出曲线,并找出定义三次B样条的节点集t0,t9。解答:m3,n5,选择节点集可以有两种方案:(1) 选择:,其余的节点按以下方式选择:故:,(2) 三次样条的另一种方案是:,其余节点按以下方式选择:,I0,,n-4故:t42,t53两种方法选择节点集,其根据是数据点沿x轴为等间距。第四章 图形的裁剪及几何变换1 写出实现下述映射的规范化变换,将左下角在(1,1),右上角在(3,5)的窗口映射到(a)规范化设备的全屏幕视区;(b)左下角在(0,0),右上角在的视区。解答:(a) 窗口参数是。视区参数是。那么且(b) 窗口参数同(a)。视区参数是。那么且2 设R是左下角L(3,1),右上角为R(2,6)的矩形窗口。请写出图中的线段端点的区域编码。【图5.6P90】解答:点(x,y)的区域编码根据下面的模式设置。比特1sign(yymax)sign(y6)比特3sign(xxmax)sign(x2)比特2sign(yminy)sign(1y)比特4sign(xminx)sign(3x)此处:因此:A(4,2)0001 B(1,7)1000C(1,5)0000 D(3,8)1010E(2,3)0000 F(1,2)0000G(1,2)0100 H(3,3)0010I(4,7)1001 J(2,0)1000Xmin=-3Xmax=2ymax=6ymin=1A(-4,2)F(1,2)E(-2,3)G(1,-2)H(3,3)C(-1,5)D(3,8)I(-4,2)J(-2,10)B(-1,7)xy3 求垂直线x和水平线y与四边形平行坐标轴的矩形裁剪窗口的交点。写出线段(从到)与(a)垂直线xa,(b)水平线yb的交点。解答:线段的参数方程是:(b) 因为,将它代入方程得到。然后把此值再代入方程,则交点是和(c) 因为,将它代入方程得到。然后把此值再代入方程,则交点是和4 如何判断一个点P(x,y)是在由A(x1,y1)和B(x2,y2)所连接的线段的左边还是右边。解答:参见图所示。对于向量AB和AP,如果P点在AB的左边,根据两个向量叉乘的定义,向量AB×AP的方向是向量K,即xy平面的正交方向。如果在右边,叉乘方向为K,此时:PBAB×APKA因此:这个叉乘的方向由下式确定:5 如果是正的,P在AB的左边。如果是负的,P在AB的右边。6 根据一个对象点绕原点旋转的旋转变换,写出对应的矩阵表示。解答:根据sin和cos的三角函数定义计算得到:x´r cos(),y´r sin()和x r cos,y r sin根据三角公式,得出:r cos() r (coscossinsin)x cosy sin和r sin() r (sincoscossin)x siny cos或x´ x cosy sin,y´ x siny cos设P´ =, P =且则可得出。7 (a)写出对象绕原点旋转的旋转变换矩阵。(b)设点为P(2,4),旋转后的新坐标是什么?解答:(a) 根据上题:R30°(b) 新的坐标可以通过矩阵乘法得到:8 写出点Q(x,y)绕定点P(h,k)旋转的旋转变换。解答:通过三步确定:(1)平移对象,使它的旋转中心P与原点重合;(2)绕原点旋转;(3)将P平移回(h,k)。使用vh Ik J作为平移向量,可通过组合变换得到: 9 写出下列关于原点的缩放变换:(a)在X轴方向缩放a单位(b)在Y轴方向缩放b单位(c)同时分别在X轴方向缩放a单位,在Y轴方向缩放b单位。解答:(a) 点P(x,y)缩放变换后得到点(ax,y),可以用形式Sa,1P的矩阵表示,即:(b) 与(a)类似,可以用形式S1,b,P的矩阵表示,即(c) 在两个方向上的缩放可以通过x´=ax和y´by变换得到Sa,bP。写成矩阵形式有:10 写出以直线L作为反射轴的反射变换矩阵。解答:设图中所示的直线L交y轴于B(0,b),倾斜角为(与x轴夹角)。然后用已知的交换来描述整个过程:(1) 平移交点B到原点。(2) 旋转使直线L跟x轴重合。(3) 关于x轴镜面对称。(4) 旋转回到原方向。(5) 将B平移回(0,b)。其交换表示为:MLTv * R* Mx * R-* T-v其中,v=bJPPxy11 矩阵被称为同时错切变换或简称错切变换。在b0的特例下叫x方向错切变换;a0时叫y方向错切变换。说明这个变换在a2和b3时对正方形A(0,0),B(1,0),C(1,1),D(0,1)进行变换的结果。解答:(d)(c)(b)(a)B(1,3)C(3,4)D(2,1)AC(1,4)B(1,3)DABADBAD(2,1)C(3,1)C(1,1)图中(a)是原始正方形,图(b)是x方向错切变换,图(c)是y方向错切变换,图(d)是在两个方向上的错切变换。12 寻找圆方程对应的xy坐标方程,假设x´y´坐标是通过对xy坐标在x方向缩放a单位,在y方向缩放b单位得到的。解答:由坐标缩放变换方程可以得到:进行替换,得到:应注意缩放的结果,圆方程经过变换后变为xy坐标系的椭圆方程。13 写出直线方程对应的xy坐标方程,假设坐标系是由xy坐标系旋转90°得到。解答:旋转坐标变换方程可以写成:,代入原方程式得到,写成y的方程式,得第五章 交互技术及用户接口第六章 三维形体的表示第七章 三维形体输出流水线1 二次旋转变换定义为先绕x轴再绕y轴旋转的变换,(a)写出这个变换的矩阵;(b)旋转的先后顺序对结果有影响吗?解答:(a) 通过组合两个旋转矩阵可以得到变换T:(b) 通过可以得到变换矩阵:这个矩阵与(a)的不同,所以旋转的顺序有影响。2 旋转轴L是向量V和通过轴的点P决定的。试写出绕L轴旋转°的变换。解答:通过下面步骤找到要求的变换:(1) 将P平移到原点。(2) 使V平行于向量K。(3) 绕K旋转。(4) 逆变换步骤(2)和(1)。因此有: 3 写出关于xy平面对称面的镜面反射变换。解答:由图得知P(x,y,z)得对称点是(x,y,z)。其反射变换是:P(x,y,z)P(x,y,z)yxz4 用原点作为投影中心,请写出满足下述条件的透视变换:通过点R0(x0,y0,z0)并且有法线向量。解答:设P(x,y,z)点投影到点。向量和方向相同,因此存在一个数,使得且现在求得值。因为所有在视平面上的点满足下面的方程:其中,将代入方程得到:这个投影变换不能用3×3矩阵变换公式表示。但是使用齐次坐标表示三维点时,可以写出投影变换得4×4矩阵:P(x,y,z)N=n1I+n2J+n3KP(x,y,z)yxz将此矩阵与点P的齐次坐标表示P(x, y, z, 1)连接运算,得到,这就是上面所得到的齐次坐标。5 写出投影到视平面zd的透视投影,其中投影中心在原点(0,0,0)。解答:平面zd平行于xy平面(且距离为d个单位)。因此视平面的法线向量N和xy平面的法线向量K,即NK。选择R0(0,0,d)视见参考点,根据上题可以确定参数:因此:所以投影矩阵是:6 写出投影到xy平面,方向是的平行投影方程。解答:从可以看出向量V和有相同方向。即。比较分量,则有:因此:在3×3的矩阵形式中,有:P(x,y,0)V=a1+b3+cKP(x,y,z)所以7 如何确定一个点P在观察体的内部还是外部?解答:一个平面空间将空间分成两部分。平面的一般方程是:对于任意点P(x,y,z),若定义一个标量函数f(P),有:如果sign f(P)sign f(Q),那么说P点和Q点在同一边(相对平面而言)。令和分别表示顶平面、底平面、左平面、右平面、近平面、远平面。另外,L和R分别是窗口的左下角点和右上角点,且Pb和Pf分别是后裁剪平面和前裁剪平面的参考点。那么如果下面都成立,则P点在观察体内:对于平面fr来说,P和L在同一边;对于平面fB来说,P和R在同一边;对于平面fR来说,P和L在同一边;对于平面fL来说,P和R在同一边;对于平面fN来说,P和Pb在同一边;对于平面fF来说,P和Pf在同一边。相当于:sign fT(P) = sign fT(L)sign fL(P) = sign fL(R)sign fB(P) = sign fB(R)sign fN(P) = sign fN(Pb)sign fR(P) = sign fR(L)sign fF(P) = sign fF(Pf)8 对于三维CohenSutherland裁剪算法,下述观察体作为裁剪区域时,线段端点的区域编码分别是什么?(a)规范化平行观察体;(b)规范化透视观察体。解答:整个过程逻辑上可以参照第5章的二维裁剪算法。在三维情况下,描述观察体的平面把三维空间分成6个重叠的外部区域(即观察体的上下左右),加上观察体的内部。因此需要用6比特区域编码。设P(x,y,z)为端点的坐标。(a) 对于规范化平行观察体,根据下述规定把每个比特设为真(1)或假(0)比特1端点在观察体上方sign(y1)比特2端点在观察体下方sign(y)比特3端点在观察体右方sign(x1)比特4端点在观察体左方sign(x)比特5端点在观察体后方sign(z1)比特6端点在观察体前方sign(z)如果(a)为正的,则sign(a)1,否则为0。(b) 对于规范化平行透视体:比特1端点在观察体上方sign(yz)比特2端点在观察体下方sign(zy)比特3端点在观察体右方sign(xz)比特4端点在观察体左方sign(zx)比特5端点在观察体后方sign(z1)比特6端点在观察体前方sign P(zfz)线段的分类是(1)如果两个区域编码都是,则为可见线段;(2)如果两个区域编码的按位与操作不是,则为完全不可见线段;(3)如果两个区域编码的按位与操作是,则为要裁剪线段9 写出线段与下述规范化观察体边界平面相交的交点:(a)平行投影;(b)透视投影。解答:设P1(x1,y1,z1)和P2(x1,y1,z1)为线段的两个端点。线段的参数方程是:交点参数是:其中N是法线向量,R0是平面的参考点。(a) 平行规范化观察体边界平面是x0,x1,y0,y1,z0和z1。对于平面x1,有NI和R0(1,0,0)。所以有:如果0t11,线段与平面有交点,交点坐标为:同理可以求出与其他平面的交点。(b) 透视规范化观察体边界平面是xz,xz,yz,yz,zzf和z1。为了求出与xz平面的交点,将平面方程写成xz0。根据这个方程,有法线向量NIK,参考点是R0(0,0,0)。所以有:如果0t11,则将代入线段的参数方程计算交点。同理可以求出与其他平面的交点。第八章 消隐及真实感图形生成技术1 已知点P1(1,2,0)、P2(3,6,20)和观察点P3(2,4,6),试判断从C(0,0,10)观察时,哪个点挡了其他点。解答:连接观察点C(0,0,10)和点P1(1,2,0)的直线是xt,y2t,z1010t为了判断P2(3,6,20)是否在这条线上,可以将点带入方程,得x3时t3,在t3时x3,y6,z20,所以P2在过C点和P1点的投影线上。接着以C为基准,判断哪个点在前面。C,P1,P2分别在这条线的t0,1,3位置上。由t值可知,P1在P2前面,即P1遮挡了P2。现在判断P3(2,4,6)是否在这条线上。x=2时t2,y4,z10。所以P3(2,4,6)不在这条投影线上,既没有遮挡P1,P2,也没有被P1、P2遮挡。2 为什么需要隐藏面消影法?解答:需要用隐藏面消影法来判断哪些物体和表面遮挡了放在它们后面的物体和表面,从而产生更逼真的图像。3 需要用哪两步判断给定的点P1(x1,y1,z1)是否遮挡了另一个点P2(x2,y2,z2)? 解答:必须判断(1)两个点是否在同一个投影线上。(2)如果是,哪个点在另一个点前面。4 为什么在平行投影时更容易确定隐藏面?解答:平行投影没有灭点,因而,任意点P(a,b,z)和其他有同样x和y坐标的点位于同一投影线上。这样只需比较z来判断哪个点更靠近观察者。5 Z缓冲器算法是怎样判断哪个面应消影的?解答:Z缓冲器算法设置了一个二维数组,类似于帧缓冲器。但是,Z缓冲器存放的是每个像素点的深度值,而不是帧缓冲器中的颜色值。Z缓冲器的初始值设置为某个大的数值,通常是后裁剪平面的距离。在判断像素(x,y)上的哪个平面更靠近观察者时,就可以简单的比较Z缓冲器中的深度值和当前平面的深度值。如果当前平面的值比Z缓冲器中的值小(即距视点更近),则用新值替换原Z缓冲器中的值,像素的颜色值也变成新平面的颜色值。6 局部光照模型和全局光照模型的不同之处是什么?解答:局部光照模型主要是考虑光源发出的光对物体的直接影响。另外,全局光照模型除了处理光源发出的光之外,还考虑其他辅助光的影响,如光线穿过透明或半透明物体,以及光线从一个物体表面反射到另一个表面等。7 物体的颜色很大程度上取决于它的漫反射系数。如果kd(0.8,0.4,0)且光源是蓝色的,那么物体是什么颜色的?解答:黑色。由kd得知,物体不反射蓝光,又光源没有红光和绿光。8 参见上题,如果光源用品红色的,会是怎样的情况?解答:红色。因为物体只反射品红色光的红色部分。9 假设点P1在扫描线y1上且亮度为I1,点P2在扫描线y2上且亮度为I2。给出y方向上的递推公式,该公式可以用线性插值计算P1和P2之间所有扫描线的亮度值I。解答:设P1为开始点,则从一条扫描线到下一条扫描线的亮度变化值为所以:且,其中i=2,.,y2y1。10 参见上题,如果在第5条线上的点P1有RGB颜色(1,0.5,0),在第15条线上的点P2有RGB颜色(0.2,0.5,0.6)。那么在第8条线上的点是什么颜色?解答:因为所以有为第8条线上点的颜色。11说出表面明暗处理的三个部分和用于计算每个部分的辅助光线。解答:局部贡献(阴影光线),反射光贡献(镜面反射光线)和透射光贡献(镜面透射光线)。12一束光线表示为,其中且。分别求出对应于t0,1,2.5和3的光线上的点坐标。解答:1. 二维空间中的直线可以表示为代数方程或参数向量方程,其中。对于和,试给出等价的代数方程。解答1:因为,所以有:即或解答2:在直线上找到两个点:所以有,即。2. 判断光线是否平行于xy平面的一个平面相交。解答:这个平面的方程是zc,其中c为常量。如果光线与这个平面相交,且交点是(xi,yi,c),为了得到xi和yi,对以下方程求t:其中,有,所以:当zd0时,光线平行于平面(不相交)。当zsc时,光线的起始点在平面上(不相交)。否则,用第三个方程计算t:如果t<0,则光线负方向的延长线与平面相交。如果t>0,则光线本身与平面相交,交点的坐标xi、yi用两个方程求出。3. 判断光线是否平行于xy平面的由xmin、xmax、ymin和ymax定义的矩形区域相交。解答:首先判断是否与xy平面相交。如果不相交,则光线与该区域不相交。否则,求出交点坐标xi和yi。如果xmin xi xmax且ymin yi ymax,则光线与区域相交,否则不相交。4. 判断光线是否平行于xy平面的一个三角形(或凸多边形)区域相交。解答:首先判断光线是否与xy平面相交。如果不相交,则光线与平面中的任何区域不相交。否则,求出交点坐标xi和yi。如果点在三角形和凸多边形区域所有的边上或边内,则点在改区域内部。边n现在仅考虑xy平面(忽略z)。为了判断交点(xi,yi)是在平面区域一条边的内侧还是外侧,先选择边上的一个点,接着定义一个指向边的外侧的向量n,再用所选择的点定义向量v,用交点定义向量vi,则有:VVi5. 设n=I+J+2K为通过点P0(1,1,0)的平面的法线向量。试判断s=-2I+J+2K,dIK的光线是否与平面相交。解答:因为:所以光线与平面相交。引入:计算:所以交点是。6. 半径为R、中心在原点的球体的隐式方程是。试判断光线std是否与球体相交。解答:设,。用分别替换x,y和z:展开并重新组合各项:或球体中心在(0,0,0)。专心-专注-专业