计算机图形学习题解答(清华)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章习题解答
一、设一条三次 Bezier 曲线的控制顶点为 P0 ,P1 ,P2 ,P3, 对曲线上一点 P ,及一个给
1 2
定的目标点 T ,给出一种调整 Bezier 曲线形状的方法,使得 P 精确通过点 T 。
1 2
解:由 Bezier 曲线的定义, P = P0 (1 − t ) 3 + 3P1t (1 − t ) 2 + 3P2t 2 (1 − t ) + P3t 3 , t =
(2) 给定三次 Beizer 曲线的控制顶点(0,0),(0,100),(100,0),(100,100),计算升阶一次后的控制 顶点。 解: 设给定原始控制顶点 P0 , P1 ,L , Pn ,定义了一条 n 次 Bezier 曲线:
P(t ) = ∑ Pi Bi, n ( t )
i= 0
n
t ∈ [0,1]
三、已知一条 Bezie r 曲线的控制顶点依次为(30, 0), (60, 10), (80, 30), (90, 60), (90, 90) 。 求 t=1/4 处的值, 并写出相应的 de Casteljau 三角形。 解:值为(75, 34.375)
(30,0) (60,10) (80,30) (90,60) (90,90) (37.5,2.5) (65,15) (82.5,37.5) (90,67.5) (44.375,5.625) (69.375,20.625) (84.375,45) (50.625,9.375) (73.125,26.71875) (56.25,13.7109375)
i i j −1 Pi*Cn +1 = Pi C n + Pn −1 C n
化简即得:
Pi =
*
i i Pi−1 + 1 − Pi n +1 n + 1
(i = 0,1,L , n + 1)
其中 P−1 = Pn +1 = 0 。 升阶一次后的控制顶点为(0,0),(0,75),(50,50),(100,25) ,(100,100) 。
mailto:wdg98@263.net
4U 电脑书库(http://wangdagang.yeah.net)
答:字库分为矢量型和点阵型两种。在笔式绘图仪上采用矢量型字符比较适合,矢量型字符 库采用矢量代码序列表示字符的各个笔画。输出一个字符时,系统中的字符处理器解释该字 符的每个矢量代码,输出对应的矢量,达到产生字符的目的。在终端显示器上显示字符一般 采用点阵型字符库。点阵型字符库为每个字符定义一个字符掩膜,即表示该字符的象素图案 的一个点阵。
b3 = (0,6) ,将 t=1/3 和 2/3 带入方程得 (3,0) = (0,3) = 8 4 2 1 b0 + b1 + b2 + b3 27 9 9 27 解得 b = ( 4,− 5 ), b = ( − 5 ,4) 。 1 2 1 2 4 8 2 2 b0 + b1 + b2 + b3 27 9 9 27
四、已知 Bezier 曲线上的四个点分别为(6, 0), (3, 0), (0, 3), (0, 6), 它们对应的参数分为 0, 1/3, 2/3, 1, 反求三次 Bezier 曲线的控制顶点。 答: 由递推公式可得:
3 b0 (t ) = (1 − t) 3b0 + 3t (1 − t) 2 tb1 + 3t 2 (1 − t )b2 + t3b3 , 所以得 b = ( 6,0) , 0
* * 增加一个顶点后,仍定义同一条曲线的新控制顶点为 P0* , P 1 ,L , Pn +1 ,则有:
来自百度文库
∑ C n Pi t (1 − t )
i i i= 0
n
n −i
= ∑ Cn +1 Pi t (1 − t )
i * i i= 0
n +1
n −i
mailto:wdg98@263.net
4U 电脑书库(http://wangdagang.yeah.net)
mailto:wdg98@263.net
4U 电脑书库(http://wangdagang.yeah.net)
1)画家算法(列表优先算法) 。原理是先把屏幕置成背景色,再把物体的各个面按其离 视点的远近进行排序,离视点远者在表头,离视点近者在表尾,排序结果存在一张深度优先 级表中。然后按照从表头到表尾的顺序逐个绘制各个面。由于后显示的图形取代先显示的画 面,而后显示的图形所代表的面离视点更近,所以由远及近的绘制各面,就相当于消除隐藏 面。画家算法原理简单,占用空间小。它的缺点是只能处理互不相交的面,而且深度优先级 表中面的顺序可能出错。在两个面相交,三个以上的面重叠的情形,用任何排序方法都不能 排出正确的序。这时只能把有关的面进行分割后再排序。 2)缓冲区(Z-Buffer)算法。算法需要有帧缓存和 z 深度缓存。在把显示对象的每个面 上每一点的属性(颜色或灰度)值填入帧缓冲器相应单元前,要把这点的 z 坐标值和 z 缓冲 器中相应单元的值进行比较。只有前者大于后者时才改变帧缓冲器的那一单元的值,同时 z 缓冲器中相应单元的值也要改成这点的 z 坐标值。 如果这点的z 坐标值小于 z 缓冲器中的值, 则说明对应象素已经显示了对象上一个点的属性,该点要比考虑的点更接近观察点。对显示 对象的每个面上的每个点都做了上述处理后,便可得到消除了隐藏面的图。这种取代方法实 现起来远比总体排序灵活简单,有利于硬件实现,速度快。然而 Z-Buffer 算法存在占用空 间大,没有利用图形的相关性与连续性的缺点。 3)扫描线算法。与 Z-buffer 算法相比,扫描线 Z-buffer 算法做了两点改进。一、 将整个绘图窗口内的消隐问题分解到一条条扫描线上解决, 使所需的 Z 缓冲器大大减少。 二、 计算深度值时,利用了面连贯性,只用了一个加法。但它在每个象素处都计算深度值,进行 深度比较。因此,被多个多边形覆盖的象素区处还要进行多次计算,计算量仍然很大。区间 扫描线算法克服了这一缺陷,使得在一条扫描线上每个区间只计算一次深度值,并且不需要 Z 缓冲器。 它是把当前扫描线与各多边形在投影平面的投影的交点进行排序后,使扫描线 分为若干子区间。因此,只要在区间任一点处找出在该处 z 值最大的一个面,这个区间上的 每一个象素就用这个面的颜色来显示。该方法占用空间小,效率高,但算法也最复杂。 4)区域子分割算法。基本思想是把物体投影到全屏幕窗口上,然后递归分割窗口,直 到窗口内目标足够简单,可以显示为止。首先,该算法把初始窗口取作屏幕坐标系的矩形, 将场景中的多边形投影到窗口内。如果窗口内没有物体则按背景色显示;若窗口内只有一个 面,则把该面显示出来。否则,窗口内含有两个以上的面,则把窗口等分成四个子窗口。对 每个小窗口再做上述同样的处理。这样反复地进行下去。如果到某个时刻,窗口仅有象素那 么大,而窗口内仍有两个以上的面,这时不必再分割,只要取窗口内最近的可见面的颜色或 所有可见面的平均颜色作为该象素的值。该方法不需要 Z 缓冲器占用空间较小,但由于使用 递归方法速度较慢。 5)光线投射。算法的思想是:考察由视点出发穿过观察屏幕的一象素而射入场景的一 条射线,则可确定出场景中与该射线相交的物体。在计算出光线与物体表面的交点之后,离 象素最近的交点的所在面片的颜色为该象素的颜色;如果没有交点,用背景色显示它即可。 光线投射算法不需要 Z 缓冲器, 通过光线跟踪可以绘制物体的真实感图形, 但计算复杂度大。 为了提高本算法的效率可以使用包围盒技术, 空间分割技术以及物体的层次表示方法等来加 速。 5. 举例说明(至少两个)增量法在光栅图形学的常用算法中的应用,并说明在算法中使用 增量法的原因。 答:增量法的应用非常多,例如:各种扫描转换,填充等等。目的是提高算法效率,适 应于硬件加速。 6. 为了在显示器等输出设备上输出字符,系统中必须装备有相应的字库。字库中存储了每 个字符的形状信息,字库分为哪两种类型?各有什么特点?
对上式左边乘以 (t + (1 − t )) ,得到:
∑C
i= 0
n
i n
i * i n +1− i Pi t i (1 − t ) n +1−i + t i +1 (1 − t ) n− i ) = ∑ C n +1 Pi t (1 − t )
比较等式两边 t i (1 − t ) n+1− i 项的系数,得到:
五 、 用 de Boor 算 法 , 求 以 (30,0),(60,10),(80,30),(90,60),(90,90) 为 控 制 顶 点 、 以 T=(0,0,0,0,0.5,1,1,1,1) 为节点向量的的三次 B 样条曲线在 t=1/4 处的值。
1 2
1 。 2
这里,我们调整 P1 至 P1 ’ ,而其他控制定点不变,使得 P 精 确 通 过 点 T ,故有
1 2
T = P0 (1 − t ) 3 + 3P1 ' t (1 − t ) 2 + 3P2 t 2 (1 − t ) + P3t 3 , t =
1 。则 2
4U 电脑书库(http://wangdagang.yeah.net)
计算机图形学(清华讲义) 第二章习题解答
1. 用中点画线法扫描转换 P1 (1,0),P2 (8,3) 直线段。要求写出每一步递推过程的 x,y 坐标 及判别式 d 的值。 答:直线方程为 ax+bx+c=0, 得 a=-3, b=7, c=3; x=1;y=0; 2d=2*a+b=1>0 x=2;y=0; 2d=2d+2a=-5<0 x=3;y=1; 2d=2d+2(a+b)=3>0 x=4;y=1; 2d=2d+2a=-3<0 x=5;y=2; 2d=2d+2(a+b)=5>0 x=6;y=2; 2d=2d+2a=-1<0 x=7;y=3; 2d=2d+2(a+b)=7>0 x=8;y=3; 2d=2d+2a=1>0 注:对 d 的判别,也可用 d=…来代替 2d=…结果是一样的。 2. 简述三种线段裁剪方法,从速度上做比较并且指明速度快慢的原因。 答:主要有下面几种算法: Cohen-Sutherland 方法 中点分割算法 梁友栋-barskey 算法 速度比较:Cohen-Sutherland 方法和中点法在大多数线段能够简单取舍时,效率较好; 梁友栋-barskey 算法只适应于矩形窗口的情形,效率比 Cyrus-Beck 算法更高。 3. 解释走样、反走样的概念。写出反走样的三种常用方法,并作比较。 答:在光栅显示器上显示图形时,直线段或图形边界或多或少会呈锯齿状。原因是图形信号 是连续的,而在光栅显示系统中,用来表示图形的却是一个个离散的象素。这种用离散量表 示连续量引起的失真现象称之为走样;用于减少或消除这种效果的技术称为反走样。 反走样常用算法: 1)提高分辨率。将显示器分辨率提高,该方法然简单,但成本高,占用内存空间大, 而且它也只能减轻而不能消除锯齿问题。 2)区域采样方法。假定每个象素是一个具有一定面积的小区域,将直线段看作具有一 定宽度的狭长矩形。当直线段与象素有交时,求出两者相交区域的面积,然后根据相 交区域面积的大小确定该象素的亮度值。该方法较简单,效果较好。计算较复杂,可 采用离散计算方法简化实现。存在两个缺点: (1)象素的亮度与相交区域的面积成正 比,而与相交区域落在象素内的位置无关,这仍然会导致锯齿效应。 (2)直线条上沿 理想直线方向的相邻两个象素有时会有较大的灰度差。 3)加权区域取样方法。使相交区域对象素亮度的贡献依赖于该区域与象素中心的距离。 计算最复杂,效果最好。但运算量很大。可采用离散计算方法实现。 4. 简述任意三种消除隐藏面的常用方法,并比较每种算法的优缺点。 (从时间、空间、图 形质量三方面比较) 。 答:可从下面五种主要方法里选三种:
1 1 2 2 T − P = 3P1 ' t (1 − t ) − 3P1t (1 − t ) , t = ,因此 2 2
1 T − P + 3P1t (1 − t ) 2 1 2 P1 ' = ,t = 。 2 3t (1 − t ) 2
二、 (1) 推导 Beizer 曲线的升阶公式。
相关文档
最新文档