课程
《计算机图形学》雨课堂随堂测试 - CG-3 光栅图形学
《计算机图形学》雨课堂随堂测试 - CG-3 光栅图形学
一、 单选题
1. 用射线法判断一个点是否在多边形内时,若该射线与多边形的交点数目为(______),则该点在多边形内部。 [ A ]
- A. 奇数
- B. 偶数
【解析】 射线法的基本思想是:从被测点引出一条射线,计算它与多边形边界的交点个数。如果交点个数为奇数,说明该点位于多边形内部;如果是偶数(包括 0),则在外部。因此本题选 A。
2. 下列哪种现象不是走样现象? [ D ]
- A. 倾斜的直线和区域的边界处呈现阶梯状、锯齿状的效果
- B. 本应均匀间隔的纹理图案,造成了不均匀的间隔显示
- C. 一些非常细的线或很小的点由于低于分辨率而不能被显示出来
- D. 当比较接近水平的线与比较接近垂直的线汇合时,汇合处外角有缺口
【解析】 走样(Aliasing)是由于用离散像素表示连续图形而引起的采样失真。典型的走样现象有:
- 光栅显示器上倾斜线条的锯齿/阶梯效应(A 属于走样);
- 纹理图像采样时产生的莫尔条纹/不均匀间隔现象(B 属于走样);
- 细小物体或细线因低于像素采样分辨率而丢失,产生闪烁或不显示(C 属于走样)。
- 而 D 选项“汇合处外角有缺口”属于线宽绘制时的线帽(Cap)或连接(Join)风格处理不当导致,并不属于采样的走样失真。因此选 D。
3. 用 DDA 算法绘制直线段 ,下面表格给出了绘制点列 的变化过程:
| 1 | 1 |
| 2 | 1 |
| ① | ② |
| 4 | 2 |
| 5 | 2 |
易求得①②处的值分别是: [ C ]
- A. 2,1
- B. 3,1
- C. 3,2
- D. 4,2
【解析】 直线起点为 ,终点为 。 ,。因为 ,所以以 为步进方向, 的增量为 。 逐步计算点列:
- 时,,四舍五入后绘制 ;
- 时,,四舍五入后绘制 ;
- 时,,按照标准四舍五入(Round-half-up 或 Round-half-even,1.5 均舍入为 2)后绘制 ;
- 时,,四舍五入后绘制 ;
- 时,,绘制 。 故当 (即①)时,对应的绘制坐标 (即②)。本题选 C。
4. 用 Bresenham 算法绘制直线段 ,下面表格给出了绘制点列 和误差判别项 的变化过程。
| 1 | 1 | -2 |
| 2 | 1 | 0 |
| 3 | ① | ② |
| 4 | 2 | -4 |
| 5 | 2 | -2 |
易求得①②处的值分别是: [ B ]
- A. 1,2
- B. 2,-6
- C. 1,-6
- D. 2,2
【解析】 起点为 ,终点为 。,。 误差判别项的初值 。
- 初始点:。因为 ,下一个点 ;新的 。
- 第二步:。因为 ,下一个点 需要加 1,即 ,所以 ;新的 。
- 因此,在第三步 时,绘制点为 (即①),误差判别项 (即②)。
- 我们进一步检验:由于 ,下一步 ,与表格第四行完全契合。 故本题选 B。
5. 用中点画线算法绘制直线段 ,误差判别项 的初值是: [ A ]
- A. 2
- B. 6
- C. -2
- D. 0
【解析】 直线斜率 。 在中点画线算法中,为了避免浮点数运算,通常将判别式乘上 2,其公式为: 。 这里 ,。 故 。 题目的参考答案给的是 A (2)。我们重新推导中点画线法的构造: 直线方程为 ,其中 ,。 判别式定义为 。 起点 在直线上,故 。 初始判别项 。 如果采用乘 2 消除小数的方式,判别项变为 。 此时判别式初值为 2。因此本题选 A。
6. 活动边表算法中多边形的水平边不装入边表 ET。请对如图多边形,补充完整 ET 和 AET 中几处数据。 [ B ]
①②③④处的值分别为:
- A. 1,3,0.5,3.25
- B. 3,1,0.5,3.25
- C. 1,3,2,3.25
- D. 3,1,2,3.25
【解析】 活动边表算法的边表(ET)节点格式通常为:。
- ①和②是属于某个 ET 节点的参数。由图可知该边对应的 和 分别是 3 和 1;
- ③是该边斜率的倒数 ,根据顶点的坐标计算可得其值为 0.5;
- ④是扫描线递增时 AET 中 坐标的更新值,其更新计算为 ,算得对应的值为 3.25。 因此选 B。
7. 用 Cohen-Sutherland 编码裁剪算法裁剪下图所示线段 ,首先对线段两端点编码。易知端点 、 的编码分别为: [ A ]
- A. 1010, 0101
- B. 0101, 1010
- C. 1100, 0011
- D. 1001, 0110
【解析】 Cohen-Sutherland 裁剪算法的编码顺序通常为(从高位到低位):上下右左(TBRL)。
- 裁剪窗口的各个区域编码:
- 窗口上方区域:,即 1000
- 窗口下方区域:,即 0100
- 窗口右侧区域:,即 0010
- 窗口左侧区域:,即 0001
- 点 A 位于窗口的右上部(即上方且右侧),其编码为 。
- 点 B 位于窗口的左下部(即下方且左侧),其编码为 。 因此选 A。
8. 用 Cohen-Sutherland 编码裁剪算法裁剪下图所示线段 ,端点编码后,从端点 开始顺序考察与各边交点。 被求出的顺序是: [ C ]
- A. P, Q, R
- B. P, R, Q
- C. R, P, Q
- D. R, Q, P
【解析】 在计算机图形学的 Cohen-Sutherland 编码线段裁剪算法中,窗口的边界通常定义为:
- 左边界 ,右边界
- 下边界 ,上边界
根据题目要求,从端点 开始顺序考察与各边交点。我们可以通过算法的裁剪步骤来推导 的求出顺序。
1. 计算端点编码 (Outcode) 编码对应的 4 位二进制从高到低通常为:[上, 下, 右, 左] (Top, Bottom, Right, Left)。
- 点 :由于 且 ,因此上和右为 1,编码为
1010。- 点 :由于 且 ,因此下和左为 1,编码为
0101。2. 模拟裁剪处理步骤
- 第一轮循环:处理点 A 题目明确指出从端点 A 开始顺序考察。点 编码为
1010(上、右为 1)。在大部分国内教材(如孙家广《计算机图形学》)的标准实现中,考察边界的顺序为:左、右、下、上。
- 右边界裁剪:优先考察右边界 。
- 计算直线 与 的交点。
- 直线斜率 。
- 代入 ,得到 。
- 该交点为 ,即图中的 点。
- 更新端点:此时端点 被更新为 ,其编码变为
0000(已在窗口边界上/内)。- 第二轮循环:处理点 B 现在端点 编码为
0000,端点 编码为0101(下、左为 1),继续对未完成的端点 进行裁剪。
- 左边界裁剪:按照“左、右、下、上”的顺序,优先考察左边界 。
- 代入 ,得到 。
- 该交点为 ,即图中的 点。
- 更新端点:此时端点 被更新为 ,其新编码计算为
0100(因为此时 ,依然在下方)。- 第三轮循环:继续处理更新后的点 B (即 P) 目前端点 编码为
0000,端点 编码为0100(下为 1)。
- 下边界裁剪:考察下边界 。
- 代入 ,由 。
- 该交点为 ,即图中的 点。
- 更新端点:端点 被更新为 ,其编码变为
0000。- 结束 两端点的编码均变为
0000,线段全在窗口内,算法结束。综上,在依序求交点的标准 Cohen-Sutherland 算法执行过程中, 被求出的先后顺序是:R, P, Q。因此本题选 C。
9. 用 Liang-Barsky 参数化裁剪算法裁剪下图所示线段 ,需要求出线段与各边交点的参数。设 点参数为 0,那么线段 与左边界交点的参数 为: [ A ]
- A. 3/4
- B. 1/4
- C. 3/5
- D. 1/5
【解析】 本题考察的是计算机图形学中的 Liang-Barsky 参数化线段裁剪算法。 根据题目中图示描述,线段两端点为 and ,且设 A 点参数为 0(这意味着线段的参数方程是从 出发指向 的,其参数 )。
1. 确定线段参数方程 以 为起点, 为终点,线段的参数方程为:
其中坐标增量为:,。 裁剪窗口边界为:左边界 ,右边界 ,下边界 ,上边界 。
2. 计算 Liang-Barsky 算法的 和 Liang-Barsky 算法的基本公式为:。 其中 对应左边界:
3. 计算交点参数 线段与左边界交点处的参数 计算为:
同理,其余边界的交点参数计算如下:
- 右边界 (): ,
- 下边界 (): ,
- 上边界 (): ,
综上,线段 与左边界交点的参数 为 。因此本题选 A。
10. 用 Liang-Barsky 参数化裁剪算法裁剪下图所示线段 ,设 点参数为 0,那么“入点”参数 为: [ B ]
- A. 3/4
- B. 1/4
- C. 3/5
- D. 1/5
【解析】 本题考察的是计算机图形学中的 Liang-Barsky 参数化线段裁剪算法。 根据题目中图示描述,线段两端点为 and ,且设 A 点参数为 0(这意味着线段的参数方程是从 出发指向 的,参数 )。
1. 确定线段参数方程与增量 以 为起点, 为终点,线段的参数方程为:
其中 ,。 裁剪窗口边界为:左边界 ,右边界 ,下边界 ,上边界 。
2. 计算 Liang-Barsky 算法各边界对应的参数 根据算法定义,各边界参数如下:
边界 边界含义 交点参数 左边界 () 右边界 () 下边界 () 上边界 () 3. 区分“入点”与“出点”并求 根据算法:
- 当 时,线段从外部延伸向内部,对应入点(Entering point)。我们要在这些 中取最大值,即 。
- 当 时,线段从内部延伸向外部,对应出点(Leaving point)。我们要在这些 中取最小值,即 。
观察上面表格, 的边界有:
- (右边界):
- (上边界):
计算“入点”参数的最大值 :
综上,“入点”参数 为 。因此本题选 B。
11. 用编码裁剪法裁剪二维线段时,判断下列直线段采用哪种处理方法。假设直线段两个端点 、 的编码为 1000 和 1001(按 TBRL 顺序)。 [ B ]
- A. 直接保留
- B. 直接舍弃
- C. 对 再分割求交
- D. 不能判断
【解析】 Cohen-Sutherland 算法中:
- 若 且 ,则线段完全在窗口内,直接保留。
- 若 ,说明线段两个端点均在同一个边界的同一外侧(此处 ,说明它们都在窗口顶边界的上方),因此该线段完全在可见区域之外,可以“直接舍弃”(简易拒绝)。本题选 B。
12. 直线的编码裁剪算法中,判断直线是否位于同一边界外侧的表达式是什么? [ C ]
- A. (c1&&c2)!=0
- B. (c1||c2)!=0
- C. (c1&c2)!=0
- D. (c1|c2)!=0
【解析】 用按位与运算符
&。若(c1 & c2) != 0,代表两个端点至少有一位同为 1,即它们同时位于裁剪窗口的某一边界外侧,可以直接被舍弃。因此选 C。
13. 根据 Cohen-Sutherland 算法,如右图所示的直线和裁剪窗口,、 两点的区域编码分别是? [ B ]
- A. 0110,0000
- B. 0101,0000
- C. 1010,1111
- D. 1001,1111
【解析】 A 点位于裁剪窗口的左下方,按上下右左(TBRL)编码:
- 位于下方,故第 2 位 B = 1;
- 位于左方,故第 4 位 L = 1;
- 其余位为 0,因此 A 点编码为 0101。 B 点位于裁剪窗口内部,所有编码位均为 0,故 B 点编码为 0000。 本题选 B。
14. 右图中最外层的窗口设为显示器窗口大小,用三类大小的窗口采用编码裁剪算法裁剪直线,其效率排序应为: [ A ]
- A. 3 > 1 > 2
- B. 3 > 2 > 1
- C. 1 > 2 > 3
- D. 2 > 1 > 3
【解析】 本题考察编码线段裁剪算法(如 Cohen-Sutherland 算法)的效率与裁剪窗口大小之间的关系。
1. 核心原理分析 Cohen-Sutherland 算法的核心优势在于:通过对线段端点的编码进行位运算(如逻辑与、逻辑或),快速判断线段是否可以“完全保留”或“完全弃置”,从而避免复杂的求交点计算。
- 窗口 3(最大窗口,等同于整个显示器大小): 绝大多数在屏幕上生成的直线段,其端点坐标都会直接落在窗口 3 的内部。当两端点编码都为
0000时,通过一次简单的按位或运算即可判断该线段“完全可见”,无需进行任何求交计算。因此,窗口越大,全保留概率越高,求交次数越少,效率最高。- 窗口 1(最小窗口): 由于窗口 1 非常小,随机生成的线段两端点很容易同时落在窗口的同一侧外部(例如都在左外侧)。当两端点编码进行按位与(
&)结果不为 0 时,可以通过一次位运算快速判断该线段“完全不可见”(简易弃置),同样无需计算交点。因此其触发“完全弃置”的概率较高,效率次之。- 窗口 2(中等大小窗口): 窗口 2 的大小适中,这意味着线段“穿过窗口边界”的概率最大。此时线段既不能被“完全保留”,也不能被“完全弃置”,算法不得不频繁地进入循环去计算线段与边界 of the 交点。求交点涉及浮点数乘除法运算,在图形学中是非常耗时的,因此导致效率最低。
综上,效率从高到低的正确排序为:3 > 1 > 2。因此本题选 A。
15. 直线裁剪的 Liang-Barsky 算法中,“入点”的参数 ;“出点”的参数 。下面错误的说法是: [ D ]
- A. 时,直线段位于窗口外
- B. 时, 不小于直线与窗口左边界(或延长线)的交点参数
- C. 时, 不大于直线与窗口左边界(或延长线)的交点参数
- D. 直线段平行于坐标轴时,
【解析】
- A. 正确。若 ,说明进入窗口的参数大离离开窗口的参数,说明整条线段均在窗口外。
- B. 正确。 表示从左侧向内穿入。由于 取所有入点参数的最大值,它自然不小于与左边界交点的参数。
- C. 正确。 表示从内向左侧穿出。由于 取所有出点参数的最小值,它自然不大于与左边界交点的参数。
- D. 错误。当直线平行于坐标轴时,对应方向的 。若在此方向上直线位于窗口之外,则算法将直接判定线段不可见并舍弃,并不能保证此时 。因此该说法是错误的。选 D。
16. 在多边形的 Sutherland-Hodgeman 算法(逐边裁剪算法)中,根据多边形的边(从顶点 到顶点 )与裁剪线(窗口的边)的位置关系,有不同的输出。请问下列哪种说法是错误的? [ A ]
- A. 和 均在可见的一侧,则输出 和
- B. 和 均在不可见的一侧,则不输出
- C. 在可见一侧, 在不可见一侧,则输出(线段 与裁剪线的)交点
- D. 在不可见的一侧, 在可见的一侧,则输出(线段 与裁剪线的)交点和
【解析】 Sutherland-Hodgeman 多边形裁剪算法对每条边()的输出规则如下:
- 若 S 和 P 都在可见一侧:只输出终点 P(因为起点 S 在前一条边处理时已被输出,避免重复输出)。因此 A 说法中“输出 S 和 P”是错误的。
- 若 S 和 P 都在不可见一侧:不输出任何点(B 正确)。
- 若 S 可见,P 不可见:说明边由内向外穿出,输出与边界的交点 I(C 正确)。
- 若 S 不可见,P 可见:说明边由外向内穿入,输出交点 I 和终点 P(D 正确)。 故本题选 A。
二、 多选题
17. 用射线法判断一个点是否在多边形内时,该射线与多边形的交点数满足一定的计数规则。若交点是多边形的顶点,则交点个数取值正确的情况是(______)。 [ B, C ]
- A. 两边都在射线的同一侧,计数 1 次
- B. 两边都在射线的同一侧,计数 2 次
- C. 两边在射线的两侧,计数 1 次
- D. 两边在射线的两侧,计数 2 次
【解析】 当测试射线通过多边形的顶点时,需要特殊处理以确保奇偶计数的准确:
- 如果与该顶点相邻的两条边都在射线的同侧(即该顶点为局部极值点),则该交点应计数 2 次(或 0 次),这样可以保持状态不被改变。
- 如果相邻的两条边分别在射线的两侧(即射线在此处穿过了多边形边界),则该交点计为 1 次。 故本题选 B、C。
18. 直线段光栅化算法中,直线段 的绘制点列如下图的算法有: [ A, B, C ]
- A. DDA 算法
- B. Bresenham 算法
- C. 中点画线算法
- D. 以上三算法均不是
【解析】 对于起终点为整数坐标的直线段,由于 DDA 算法、Bresenham 算法和中点画线算法对像素近似取整的数学本质一致,在绘制像素级坐标时,它们会生成完全一致的离散点列。本题选 A、B、C。
三、 判断题
19. 增强图像像素的显示亮度能够获得反走样效果。 ( × )
- A. 正确 (True)
- B. 错误 (False)
【解析】 仅仅单纯调高或增强像素的显示亮度,并不能消除由于离散采样带来的锯齿失真。反走样(Anti-aliasing)通常需要通过区域取样、加权过滤等方法,根据像素被图形覆盖的面积大小来调整像素的灰度或色彩深度,使边缘平滑过渡。故本题说法错误,选 B。
四、 填空题
20. 对图形进行光栅化时,用离散的像素表示连续的直线或区域边界引起的失真现象称为______ 走样 ,用于减少或者消除走样的技术称为 反走样 ______。
【解析】 这是图形学中的基本概念。失真现象被称为“走样”(Aliasing),用来减轻或消除该现象的技术称为“反走样”(Anti-aliasing)。













