计算机图形学+机械工业出版社+徐长青+答案
计算机图形学作业答案
第一章序论
第二章图形系统
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所对应的值,并画出结果。
解答:由于直线的方程没有给出,所以必须找到直线的方程。下面是寻找直线方程(y =mx+b)的过程。首先寻找斜率:
m =⊿y/⊿x =(y
2-y
1
)/(x
2
-x
1
)=(18-0)/(6-0) = 3
接着b在y轴的截距可以代入方程y=3x+b求出 0=3(0)+b。因此b=0,所以直线方程为y=3x。
2.使用斜截式方程画斜率介于0°和45°之间的直线的步骤是什么?
解答:
(1)计算dx:dx=x
2-x
1
。
(2)计算dy:dy=y
2-y
1
。
(3)计算m:m=dy/dx。
(4)计算b: b=y
1-m×x
1
(5)设置左下方的端点坐标为(x,y),同时将x
end
设为x的最大值。如果
dx < 0,则x=x
2、y=y
2
和x
end
=x
1
。如果dx > 0,那么x=x
1
、y=y
1
和x
end =x
2
。
(6)测试整条线是否已经画完,如果x > x
end
就停止。
(7)在当前的(x,y)坐标画一个点。
(8)增加x:x=x+1。
(9)根据方程y=mx+b计算下一个y值。
(10)转到步骤(6)。
3.请用伪代码程序描述使用斜截式方程画一条斜率介于45°和-45°(即|m|>1)之间的直线所需的步骤。
假设线段的两个端点为(x1,y1)和(x2,y2),且y1 int x = x1, y = y1; float x f, m = (y2-y1)/(x2-x1), b = y1-mx1; setPixel( x, y );/*画一个像素点*/ while( y < y2 ) { y++; x f = ( y-b)/m; x = Floor( x f +0.5 ); setPixel( x, y ); } 4.请用伪代码程序描述使用DDA算法扫描转换一条斜率介于-45°和45°(即|m| ≤1)之间的直线所需的步骤。 解答: 假设线段的两个端点(x1, y1)和(x2,y2),且x1 int x = x1, y; float y f = y1, m = ( y2– y1) / ( x2-x1); while( x < = x2 ) { y = Floor( y f + 0.5 ); setPixel( x, y ); x++; y f = y f + m; } 5.使用Bresenham算法画斜率介于0°和45°之间的直线所需的步骤。 解答: (1)计算初始值: dx =x2-x1In c2 =2(dy-dx) dy =y2-y1 d =In c1-dx In c1 =2dy (2)设置左下方的端点坐标为(x,y),同时将x end设为x的最大值。如果dx < 0,则x=x2,y=y2和x end=x1。如果dx > 0, 那么x=x1、y=y1 和x end=x2。 (3)在当前的(x,y)坐标画一个点。 (4)判断整条线段是否已经画完,如果x=x end就停止。 (5)计算下一像素的位置。如果d<0,那么d=d+In c1。如果d≥0,那么d=d + In c2,并且y=y+1。 (6)增加x:x=x+1。 (7)在当前的(x,y)坐标画一个点。 (8)转到步骤(4)。 6.请指出用Bresenham算法扫描转换从像素点(1,1)到(8,5)的线段时的像素位置。 首先必须找到初始值。在这个例子中, dx = x 2-x 1 = 8-1 = 7 dy = y 2-y 1 = 5-1 = 4 因此, In c 1= 2dy = 2×4 = 8 In c 1=2(dy -dx )= 2×(4-7)=-6 d =In c 1-dx =8-7=1 7. 使用Bresenham 算法扫描转换圆的步骤是什么? 解答: (1) 设置初始变量:(h ,k )=圆心坐标;x =0;y =圆的半径r ;d =3-2r 。 (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,那么d =d +4x +6和x =x +1。如果d ≥0,那么d =d +4(x -y )+10、x =x+1和y =y -1。 (5) 转到步骤(2)。 8. 给定数据点P 0(0,0),P 1(1,2)P 2(2,1)P 3(3,-1)P 4(4,10)P 5(5,5),用三次B 样条插值法插值这些数据点,求出曲线,并找出定义三次B 样条的节点集t 0,……,t 9。 解答: m =3, n =5,选择节点集可以有两种方案: (1) 选择: )(103210x t t t t <-====, )(69876n x t t t t >==== 其余的节点按以下方式选择: 1,......,0,...11--=++= ++++m n i m x x t m i i m i 故: 23 3 21=++= t , 33 4 32=++= t (2) 三次样条的另一种方案是: 13210-====t t t t , 69876====t t t t 其余节点按以下方式选择: 24++=i i x t ,I =0,……,n-4 故: t 4=2, t 5=3 两种方法选择节点集,其根据是数据点沿x 轴为等间距。 第四章 图形的裁剪及几何变换 1. 写出实现下述映射的规范化变换,将左下角在(1,1),右上角在(3,5)的窗口 映射到(a )规范化设备的全屏幕视区;(b )左下角在(0,0),右上角在⎪⎭⎫ ⎝ ⎛21,21的视区。 解答: (a ) 窗口参数是5,1,3,1m a x m i n m a x m i n ====wy wy wx wx 。视区参数是1,0,1,0m a x m i n m a x m i n ====vy vy vx vx 。那么4 1,2 1= =y x s s 且 ⎪⎪⎪⎪⎪⎪⎭⎫ ⎝ ⎛-- =10 041410 21021N (b ) 窗口参数同(a )。视区参数是2 1,0,2 1,0min max max min = == =wy vy vx vx 。那 么8 1,41= = y x s s 且 ⎪⎪⎪⎪⎪⎪⎭ ⎫ ⎝ ⎛--=10 081810 41041 N 2. 设R 是左下角L (-3,1),右上角为R (2,6)的矩形窗口。请写出图中的线段端点的区域编码。【图5.6 P90】 解答: 点(x ,y )的区域编码根据下面的模式设置。 比特1=sign (y -y max )=sign (y -6) 比特3=sign (x -x max )=sign (x -2) 比特2=sign (y min -y )=sign (1-y ) 比特4=sign (x min -x )=sign (-3-x ) 此处: ⎩ ⎨⎧≤>=)0(,0) 0(,1)(a a a sign 因此: A (-4,2)→0001 B (-1,7)→1000 C (-1,5)→0000 D (3,8)→1010 E (-2,3)→0000 F (1,2)→0000 G (1,2)→0100 H (3,3)→0010 I (-4,7)→1001 J (-2,0)→1000 3. 求垂直线x 和水平线y 与21P P 四边形平行坐标轴的矩形裁剪窗口的交点。写出线段 (从),(111y x P 到),(222y x P )与(a )垂直线x =a ,(b )水平线y =b 的交点。 解答: 线段的参数方程是: ⎩ ⎨ ⎧-+=-+=)() (121121y y t y y x x t x x 10≤≤t (b ) 因为a x =,将它代入方程)()(121x x x a t --=得到。然后把此值再代入方程, 则交点是a x I =和 ()1212 11y y x x x a y y I -⎪⎪⎭ ⎫ ⎝⎛--+= (c ) 因为b y =,将它代入方程)()(121y y y b t --=得到。然后把此值再代入方 程,则交点是b y I =和 ()1212 1 1x x y y y a x x I -⎪⎪⎭ ⎫ ⎝⎛--+= 4. 如何判断一个点P (x ,y )是在由A(x 1,y 1)和B(x 2,y 2)所连接的线段的左边还是右边。 解答: 参见图所示。对于向量AB 和AP ,如果P 点在AB 的左边,根据两个向量叉乘的 定义,向量AB ×AP 的方向是向量K ,即xy 平面的正交方向。如果在右边,叉乘方向为-K ,此时: J y y I x x AP J y y I x x AB )()()()(111212-+-=-+-= 因此: ()()()()[]K x x y y y y x x AP AB 112112-----= ⨯ 这个叉乘的方向由下式确定: ()()()()112112x x y y y y x x C -----= 5. 如果C 是正的,P 在AB 的左边。如果C 是负的,P 在AB 的右边。 6. 根据一个对象点绕原点旋转的旋转变换,写出对应的矩阵表示。 解答: 根据sin 和cos 的三角函数定义计算得到: x ´=r cos (θ+Φ),y´=r sin (θ+Φ) 和 x =r cos Φ, y =r sin Φ 根据三角公式,得出: r cos (θ+Φ)= r (cos θcos Φ-sin θsin Φ)=x cos θ-y sin θ 和 r sin (θ+Φ)= r (sin θcos Φ+cos θsin Φ)=x sin θ-y cos θ 或 x´ = x cos θ-y sin θ, y´ = x sin θ+y cos θ 设P´ =''x y ⎛⎫ ⎪⎝⎭ , P =x y ⎛⎫ ⎪⎝⎭且 θR =cos sin sin sin θθθ θ-⎛⎫ ⎪⎝⎭ 则可得出P R P ∙='θ。 7. (a )写出对象绕原点旋转的旋转变换矩阵。(b )设点为P (2,-4),旋转后的新 坐标是什么? P B AB ×AP K A 解答: (a ) 根据上题: R 30°=cos 30sin 30sin 30 cos 30o o o o ⎛⎫- ⎪ ⎝⎭ =12 21 2 2⎛⎫- ⎪ ⎪ ⎪ ⎪⎝⎭ (b ) 新的坐标可以通过矩阵乘法得到: 12212 2⎛⎫- ⎪ ⎝⎭ 24⎛⎫ ⎪-⎝⎭ =21⎛⎫ -⎝ 8. 写出点Q (x ,y )绕定点P (h ,k )旋转的旋转变换。 解答: 通过三步确定:(1)平移对象,使它的旋转中心P 与原点重合;(2)绕原点旋转;(3)将P 平移回(h ,k )。 使用v =h I +k J 作为平移向量,P R ,θ可通过组合变换得到: v v O T R T R -'∙∙=θθ, 9. 写出下列关于原点的缩放变换:(a )在X 轴方向缩放a 单位 (b )在Y 轴方向缩放 b 单位( c )同时分别在X 轴方向缩放a 单位,在Y 轴方向缩放b 单位。 解答: (a ) 点P (x ,y )缩放变换后得到点(ax ,y ),可以用形式S a ,1•P 的矩阵表示, 即: 00 1a ⎛⎫ ⎪⎝⎭x y ⎛⎫ ⎪⎝⎭=ax y ⎛⎫ ⎪⎝⎭ (b ) 与(a )类似,可以用形式S 1,b ,P 的矩阵表示,即 1 00 b ⎛⎫ ⎪⎝⎭x y ⎛⎫ ⎪⎝⎭=x by ⎛⎫ ⎪⎝⎭ (c ) 在两个方向上的缩放可以通过x´=ax 和y´=by 变换得到S a ,b •P 。写成矩阵 形式有: 00 a x ax b y by ⎛⎫⎛⎫⎛⎫= ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭ 10. 写出以直线L 作为反射轴的反射变换矩阵。 解答: 设图中所示的直线L 交y 轴于B (0,b ),倾斜角为θ(与x 轴夹角)。然后用已知的交换来描述整个过程: (1) 平移交点B 到原点。 (2) 旋转-︒θ使直线L 跟x 轴重合。 (3) 关于x 轴镜面对称。 (4) 旋转︒θ回到原方向。 (5) 将B 平移回(0,b )。 其交换表示为: M L =T v * R θ* M x * R --θ* T -v 其中,v=bJ 11. 矩阵11a b ⎛⎫ ⎪⎝⎭ 被称为同时错切变换或简称错切变换。在b =0的特例下叫x 方向错切变换;a =0时叫y 方向错切变换。说明这个变换在a =2和b =3时对正方形A (0,0),B (1,0),C (1,1),D (0,1)进行变换的结果。 解答: 图中(a )是原始正方形,图(b )是x 方向错切变换,图(c )是y 方向错切变换,图(d )是在两个方向上的错切变换。 12. 寻找圆方程对应的xy 坐标方程,假设x´y´坐标是通过对xy 坐标在x 方向缩放 a 单位,在y 方向缩放 b 单位得到的。 ()()12 2 ='+'y x 解答: 由坐标缩放变换方程可以得到: x a x 1'= y b y 1'= 进行替换,得到: 12 2 =⎪⎭ ⎫ ⎝⎛+⎪⎭⎫ ⎝⎛b y a x C(1,1) B A D A ’ B ’ A ’ A ’ 3,4) (a) (b) (c) (d) 应注意缩放的结果,圆方程经过变换后变为xy 坐标系的椭圆方程。 13. 写出直线方程b mx y +=''对应的xy 坐标方程,假设''y x 坐标系是由xy 坐标 系旋转90°得到。 解答: 旋转坐标变换方程可以写成: '90sin 90cos 'y y x x =︒+︒=, x y x y -=︒+︒-=90cos 90sin ' 代入原方程式得到b my x +=-,写成y 的方程式,得m b x m y //)/1(--= 第五章 交互技术及用户接口 第六章 三维形体的表示 第七章 三维形体输出流水线 1. 二次旋转变换定义为先绕x 轴再绕y 轴旋转的变换,(a )写出这个变换的矩阵;(b ) 旋转的先后顺序对结果有影响吗? 解答: (a ) 通过组合两个旋转矩阵可以得到变换T : J x I y R R T ,,θθ∙= ⎪⎪⎪⎪⎪⎭ ⎫ ⎝⎛-⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-=10 0cos sin 00sin cos 00001 10 00cos 0sin 00100sin 0cos x x x x y y y y θθθθθθθθ ⎪⎪⎪⎪⎪⎭ ⎫ ⎝ ⎛--=10 00cos cos sin cos sin 0sin cos 00cos sin sin sin cos x y x y y x x x y x y y θθθθθθθθθθθθ (b ) 通过J y I x R R ,,θθ∙可以得到变换矩阵: ⎪⎪⎪⎪⎪⎭ ⎫ ⎝ ⎛ --10 00cos cos sin sin cos 0cos sin cos sin sin 0sin 0cos y x x y x y x x y x y y θθθθ θθθθθθθθ 这个矩阵与(a )的不同,所以旋转的顺序有影响。 2. 旋转轴L 是向量V 和通过轴的点P 决定的。试写出绕L 轴旋转θ°的变换。 解答: 通过下面步骤找到要求的变换: (1) 将P 平移到原点。 (2) 使V 平行于向量K 。 (3) 绕K 旋转︒θ。 (4) 逆变换步骤(2)和(1)。 因此有: P V K V p L T A R A T R ----∙∙∙∙=,1 1 ,θθ 3. 写出关于xy 平面对称面的镜面反射变换。 解答: 由图得知P (x ,y ,z )得对称点是P '(x ,y ,-z )。其反射变换是: ⎪⎪⎪⎭ ⎫ ⎝ ⎛-=10 0010 001 M 4. 用原点作为投影中心,请写出满足下述条件的透视变换:通过点R 0(x 0,y 0,z 0) 并且有法线向量K n J n I n N 321++=。 解答: 设P (x ,y ,z )点投影到()z y x P '''',,点。向量PO 和O P '方向相同,因此存在一个数α,使得PO a O P ='且 z z y y x x ααα='='=',, 现在求α得值。因为所有在视平面上的点()z y x P '''',,满足下面的方程: 0321d z n y n x n ='+'+' y 其中,0302010z n y n x n d ++=,将z z y y x x ααα='='=',,代入方程得到: z n y n x n d 3210 ++= α 这个投影变换不能用3×3矩阵变换公式表示。但是使 用齐次坐标表示三维点时, 可以写出投影变换得4×4矩阵: ⎪⎪⎪⎪⎪⎭ ⎫ ⎝⎛=00000000003 2 1 000,0 n n n d d d Per R N 将此矩阵与点P 的齐次坐标表示P (x, y , z, 1)连接运算,得到 ),,,(321000z n y n x n z d y d x d P ++',这就是上面所得到的()z y x P '''',,齐次坐标。 5. 写出投影到视平面z =d 的透视投影,其中投影中心在原点(0,0,0)。 解答: 平面z =d 平行于xy 平面(且距离为d 个单位)。因此视平面的法线向量N 和xy 平面的法线向量K ,即N =K 。选择R 0(0,0,d )视见参考点,根据上题可以确定参数: )1,0,0(),,(321=n n n N ),0,0(),,(0000d z y x R = 因此: d z n y n x n d =+++0302010 所以投影矩阵是: ⎪⎪⎪⎪⎪⎭ ⎫ ⎝ ⎛=01 00000000000 ,d d d Per R N 6. 写出投影到xy 平面,方向是cK bJ aI V ++=的平行投影方程。 解答: 从可以看出向量V 和P P '有相同方向。即kV P P ='。比较分量,则有: kc z z kb y y ka x x =-'=-'=-',, 因此: z c b y y z c a x x c z k - ='- ='- =,, 在3×3的矩阵形式中,有: ⎪⎪⎪⎪⎪⎪⎭ ⎫ ⎝ ⎛--=00 01001c b c a P V ar 所以P Par P V ∙=' 7. 如何确定一个点P 在观察体的内部还是外部? 解答: 一个平面空间将空间分成两部分。平面的一般方程是: 0)()()(030201=-+-+-z z n y y n x x n 对于任意点P (x ,y ,z ),若定义一个标量函数f (P ),有: )()()(),,()(030201z z n y y n x x n z y x f P f -+-+-=≡ 如果sign f (P )=sign f (Q ),那么说P 点和Q 点在同一边(相对平面而言)。令 N L R B r f f f f f ,,,,和F f 分别表示顶平面、底平面、左平面、右平面、近平面、远平面。 另外,L 和R 分别是窗口的左下角点和右上角点,且P b 和P f 分别是后裁剪平面和前裁剪平面的参考点。 那么如果下面都成立,则P 点在观察体内: 对于平面f r 来说,P 和L 在同一边; 对于平面f B 来说,P 和R 在同一边; 对于平面f R 来说,P 和L 在同一边; 对于平面f L 来说,P 和R 在同一边; 对于平面f N 来说,P 和P b 在同一边; P ’(x ’,y ’,V=a1+b3 P(x,y,z) 对于平面f F 来说,P 和P f 在同一边。 相当于: sign f T (P) = sign f T (L) sign f L (P) = sign f L (R) sign f B (P) = sign f B (R) sign f N (P) = sign f N (P b ) sign f R (P) = sign f R (L) sign f F (P) = sign f F (P f ) 8. 对于三维Cohen -Sutherland 裁剪算法,下述观察体作为裁剪区域时,线段端点的 区域编码分别是什么?(a )规范化平行观察体;(b )规范化透视观察体。 解答: 整个过程逻辑上可以参照第5章的二维裁剪算法。在三维情况下,描述观察体的平面把三维空间分成6个重叠的外部区域(即观察体的上下左右),加上观察体的内部。因此需要用6比特区域编码。设P (x ,y ,z )为端点的坐标。 (a ) 对于规范化平行观察体,根据下述规定把每个比特设为真(1)或 假(0) 比特1=端点在观察体上方=sign (y -1) 比特2=端点在观察体下方=sign (-y ) 比特3=端点在观察体右方=sign (x -1) 比特4=端点在观察体左方=sign (-x ) 比特5=端点在观察体后方=sign (z -1) 比特6=端点在观察体前方=sign (-z ) 如果(a )为正的,则sign (a )=1,否则为0。 (b ) 对于规范化平行透视体: 比特1=端点在观察体上方=sign (y -z ) 比特2=端点在观察体下方=sign (-z -y ) 比特3=端点在观察体右方=sign (x -z ) 比特4=端点在观察体左方=sign (-z -x ) 比特5=端点在观察体后方=sign (z -1) 比特6=端点在观察体前方=sign P (z f -z ) 线段的分类是(1)如果两个区域编码都是000000,则为可见线段;(2)如果两个区域编码的按位与操作不是000000,则为完全不可见线段;(3)如果两个区域编码的按位与操作是000000,则为要裁剪线段 9. 写出线段与下述规范化观察体边界平面相交的交点:(a )平行投影;(b )透视投影。 解答: 设P 1(x 1,y 1,z 1)和P 2(x 1,y 1,z 1)为线段的两个端点。线段的参数方程是: t z z z z t y y y y t x x x x )(,)(,)(121121121-+=-+=-+= 交点参数是: 2 110P P N P R N t I ∙∙∙-= 其中N 是法线向量,R 0是平面的参考点。 (a ) 平行规范化观察体边界平面是x =0,x =1,y =0,y =1,z =0和z =1。对于平面x =1,有N =I 和R 0(1,0,0)。所以有: 1 21)1(x x x t I ---= 如果0≤t 1≤1,线段与平面有交点,交点坐标为: 1)1)((121121=--- -+=x x x x x x x )1)((121121y y y y y y y --- -+= )1)((1 21121z z z z z z z --- -+= 同理可以求出与其他平面的交点。 (b ) 透视规范化观察体边界平面是x =z ,x =-z ,y =z ,y =-z ,z =z f 和z =1。为了求 出与x =z 平面的交点,将平面方程写成x -z =0。根据这个方程,有法线向量N =I -K ,参考点是R 0(0,0,0)。所以有: ) )((12121 1z z x x z x t I ---- = 如果0≤t 1≤1,则将代入线段的参数方程计算交点。同理可以求出与其他平面的交点。 第八章 消隐及真实感图形生成技术 1. 已知点P 1(1,2,0)、P 2(3,6,20)和观察点P 3(2,4,6),试判断从C (0,0,-10)观察时,哪个点挡了其他点。 解答: 连接观察点C (0,0,-10)和点P 1(1,2,0)的直线是 x =t ,y =2t , z =-10+10t 为了判断P 2(3,6,20)是否在这条线上,可以将点带入方程,得x =3时t =3,在t =3时x =3,y =6,z =20,所以P 2在过C 点和P 1点的投影线上。 接着以C 为基准,判断哪个点在前面。C ,P 1,P 2分别在这条线的t =0,1,3位置上。由t 值可知,P 1在P 2前面,即P 1遮挡了P 2。 现在判断P 3(2,4,6)是否在这条线上。x=2时t =2,y =4,z =10。所以P 3(2,4,6)不在这条投影线上,既没有遮挡P 1,P 2,也没有被P 1、P 2遮挡。 2. 为什么需要隐藏面消影法? 解答:需要用隐藏面消影法来判断哪些物体和表面遮挡了放在它们后面的物体和表面,从而产生更逼真的图像。 3. 需要用哪两步判断给定的点P 1(x 1,y 1,z 1)是否遮挡了另一个点P 2(x 2,y 2,z 2)? 解答:必须判断(1)两个点是否在同一个投影线上。(2)如果是,哪个点在另一个点 4. 为什么在平行投影时更容易确定隐藏面? 解答:平行投影没有灭点,因而,任意点P (a ,b ,z )和其他有同样x 和y 坐标的点位于同一投影线上。这样只需比较z 来判断哪个点更靠近观察者。 5. Z 缓冲器算法是怎样判断哪个面应消影的? 解答:Z 缓冲器算法设置了一个二维数组,类似于帧缓冲器。但是,Z 缓冲器存放的是每个像素点的深度值,而不是帧缓冲器中的颜色值。Z 缓冲器的初始值设置为某个大的数值,通常是后裁剪平面的距离。在判断像素(x ,y )上的哪个平面更靠近观察者时,就可以简单的比较Z 缓冲器中的深度值和当前平面的深度值。如果当前平面的值比Z 缓冲器中的值小(即距视点更近),则用新值替换原Z 缓冲器中的值,像素的颜色值也变成新平面的颜色值。 6. 局部光照模型和全局光照模型的不同之处是什么? 解答: 局部光照模型主要是考虑光源发出的光对物体的直接影响。另外,全局光照模型除了处理光源发出的光之外,还考虑其他辅助光的影响,如光线穿过透明或半透明物体,以及光线从一个物体表面反射到另一个表面等。 7. 物体的颜色很大程度上取决于它的漫反射系数。如果k d =(0.8,0.4,0)且光源是 蓝色的,那么物体是什么颜色的? 解答:黑色。由k d 得知,物体不反射蓝光,又光源没有红光和绿光。 8. 参见上题,如果光源用品红色的,会是怎样的情况? 解答:红色。因为物体只反射品红色光的红色部分。 9. 假设点P 1在扫描线y 1上且亮度为I 1,点P 2在扫描线y 2上且亮度为I 2。给出y 方向上的递推公式,该公式可以用线性插值计算P 1和P 2之间所有扫描线的亮度值I ’。 解答:设P 1为开始点,则从一条扫描线到下一条扫描线的亮度变化值为 )/()(1212y y I I I --=∆ 所以: 11I I ='且I I I i i ∆+'='-1,其中i=2,…..,y 2-y 1。 10. 参见上题,如果在第5条线上的点P 1有RGB 颜色(1,0.5,0),在第15条 线上的点P 2有RGB 颜色(0.2,0.5,0.6)。那么在第8条线上的点是什么颜色? 解答: 因为 06 .0)515/()06.0(0)515/()5.05.0(08 .0)515/()12.0(=--=∆=--=∆-=--=∆R G R 所以有[])18.0,5.0,76.0(06.030,035.0),08.0(31=⨯+⨯+-⨯+为第8条线上点的颜 11.说出表面明暗处理的三个部分和用于计算每个部分的辅助光线。 解答:局部贡献(阴影光线),反射光贡献(镜面反射光线)和透射光贡献(镜面透射光线)。 12.一束光线表示为td s t r +=)(,其中K J I s 32-+=且K I d 2+=。分别求出对应于t =0,1,2.5和3的光线上的点坐标。 解答: ) 3,1,5(35)63()32()3()2,1,5.4(25.4)53()5.22()5.2() 1,1,3(3)23()12()1() 3,1,2(32)03()02()0(→++=+-+++=→++=+-+++=-→-+=+-+++=-→-+=+-+++=K J I K J I r K J I K J I r K J I K J I r K J I K J I r 1. 二维空间中的直线可以表示为代数方程b mx y +=或参数向量方程 td s t L +=)(,其中+∞<<∞-t 。对于J I s +=和J I d -=,试给出等价的代数方 程。 解答1: 因为J t I t td s t L )1()1()(-++=+=,所以有: t y t x -=+=1,1 即 2=+y x 或2+-=x y 解答2: 在直线上找到两个点: ) 0,2(2)1()1,1()0(→=+=→+==I d s L J I s L 所以有 )12/()10()1/()1(--=--x y ,即2+-=x y 。 2. 判断光线是否平行于xy 平面的一个平面相交。 解答: 这个平面的方程是z =c ,其中c 为常量。如果光线与这个平面相交,且交点是(x i ,y i ,c ),为了得到x i 和y i ,对以下方程求t : cK J y I x td s i i ++=+ 其中,有K z J y I x s s s s ++=, K z J y I x d d d d ++= 所以: ⎪⎩⎪ ⎨⎧=+=+=+c tz z y ty y x tx x d s i d s i d s 当z d =0时,光线平行于平面(不相交)。当z s =c 时,光线的起始点在平面上(不相交)。 否则,用第三个方程计算t : d s z z c t -= 如果t<0,则光线负方向的延长线与平面相交。如果t>0,则光线本身与平面相交,交点的坐标x i 、y i 用两个方程求出。 3. 判断光线是否平行于xy 平面的由x min 、x max 、y min 和y max 定义的矩形区域相交。 解答:首先判断是否与xy 平面相交。如果不相交,则光线与该区域不相交。否则,求出交点坐标x i 和y i 。如果x min ≤ x i ≤ x max 且y min ≤ y i ≤ y max ,则光线与区域相交,否则不相交。 4. 判断光线是否平行于xy 平面的一个三角形(或凸多边形)区域相交。 解答: 首先判断光线是否与xy 平面相交。如果不相交,则光线与平面中的任何区域不相交。否则,求出交点坐标x i 和y i 。如果点在三角形和凸多边形区域所有的边上或边内,则点在改区域内部。 现在仅考虑xy 平面(忽略z )。为了判断交点(x i ,y i )是在平面区域一条边的内侧还是外侧,先选择边上的一个点,接着定义一个指向边的外侧的向量n ,再用所选择的点定义向量v ,用交点定义向量v i ,则有: ()() ()()()() ⎪ ⎩⎪ ⎨⎧︒><︒==︒<>=-∙90,090,090,0)(θθθ在边的内侧在边上在边的外侧i i i i i i i y x y x y x v v n 5. 设n=I+J+2K 为通过点P 0=(1,1,0)的平面的法线向量。试判断s=-2I+J+2K ,d =I -K 的光线是否与平面相交。 解答:因为: 01)1(20111<-=-⨯+⨯+⨯=∙d n 所以光线与平面相交。引入: K I K J I K z z J y y I x x p s s s 23)20()11()]2(1[)()()(000-=-+-+--=-+-+-= 计算: 11 ) 2(20131=--⨯+⨯+⨯= ∙∙= d n p n t 所以交点是 )1,1,1(),,(-=+++d s d s d s z z y y x x 。 6. 半径为R 、中心在原点的球体的隐式方程是02222=-++R z y x 。试判断光线s +td 是否与球体相交。 解答: 设K z J y I x s s s s ++=,K z J y I x d d d d ++=。用d s d s d s tz z ty y tx x +++,,分别替换x ,y 和z : ()()0)(2 2 22 =-+++++R tz z ty y tx x d s d s d s 展开并重新组合各项: () ()() 022 2 2 2 2 2 22=-++++++++R z y x t z z y y x x z y x d d d d s d s d s d d d 或 022 2 2 2 =-+∙+R s dt s t d 球体中心在(0,0,0)。 计算机图形学作业答案 第一章序论 第二章图形系统 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所对应的值,并画出结果。 解答:由于直线的方程没有给出,所以必须找到直线的方程。下面是寻找直线方程(y =mx+b)的过程。首先寻找斜率: m =⊿y/⊿x =(y 2-y 1 )/(x 2 -x 1 )=(18-0)/(6-0) = 3 接着b在y轴的截距可以代入方程y=3x+b求出 0=3(0)+b。因此b=0,所以直线方程为y=3x。 2.使用斜截式方程画斜率介于0°和45°之间的直线的步骤是什么? 解答: (1)计算dx:dx=x 2-x 1 。 (2)计算dy:dy=y 2-y 1 。 (3)计算m:m=dy/dx。 (4)计算b: b=y 1-m×x 1 (5)设置左下方的端点坐标为(x,y),同时将x end 设为x的最大值。如果 dx < 0,则x=x 2、y=y 2 和x end =x 1 。如果dx > 0,那么x=x 1 、y=y 1 和x end =x 2 。 (6)测试整条线是否已经画完,如果x > x end 就停止。 (7)在当前的(x,y)坐标画一个点。 (8)增加x:x=x+1。 (9)根据方程y=mx+b计算下一个y值。 (10)转到步骤(6)。 3.请用伪代码程序描述使用斜截式方程画一条斜率介于45°和-45°(即|m|>1)之间的直线所需的步骤。 计算机图形学课后题答案 10.设五边形的五个顶点是(10.5,10.5),(15,5),(12,5),(8,2.5),(4,5.5),要利用使用活跃边表的扫描转换算法进行填充,写出应填写的ET表,写出活跃边表的变化情况。 e3 e2 e4 e1 e5 6 3 6 8 -4/3 e 1 5 8 2 ∧ e 5 ∧ 2 ∧ 4 ∧ 5 6 11 141/3 -2/3 ∧ e 3 7 ∧ 8 11 52/5 7/5 e 2 ∧ ∧ 9 ∧ 10 ∧ 11 ∧ 12 ∧ 13 … ∧ y max x min 1/m ET : Y 吊桶表 第3章 2.写出完成如下平面图形变换的变换矩阵; (1) 保持点(5,10)固定,x 方向放大3倍,y 方向放大2倍。 (2) 绕坐标原点顺时针旋转︒90。 (3) 对直线x y =成轴对称。 (4) 对直线x y -=成轴对称。 (5) 沿与水平方向成θ角的方向扩大1S 倍,沿与水平方向成θ+︒90角的方向扩大2 S 倍。 (6) 对于平面上任意一点),(00y x 成为中心对称。 (7) 对平面上任意一条方程为0=++C By Ax 的直线成轴对称。 (1) 3 00(5,10)(3,2)(5,10)02010101T S T ⎡⎤⎢⎥--⋅⋅--=⎢⎥ ⎢⎥--⎣⎦ (2) AET 指针 ∧ 初始化 扫描线10 11 93/5 7/5 扫描线3 6 8 -4/3 e 1 5 8 2 ∧ e 5 e 2 扫描线4 6 62/3 -4/3 e 1 5 10 2 ∧ e 5 扫描线5 6 51/3 -4/3 e 1 5 12 2 ∧ e 5 扫描线6 6 4 -4/3 e 1 11 141/3 -2/3 ∧ e 3 扫描线7 11 52/5 7/5 e 2 11 132/3 -2/3 ∧ e 3 扫描线8 11 64/5 7/5 e 2 11 13 -2/3 ∧ e 3 扫描线9 11 81/5 7/5 e 2 11 121/3 -2/3 ∧ e 3 11 112/3 -2/3 ∧ e 3 扫描线11 11 11 7/5 e 2 11 11 -2/3 ∧ e 3 ∧ 扫描线12计算机图形学+机械工业出版社+徐长青+答案
计算机图形学课后题答案-徐长青、许志闻