草庐IT

【计算机图形学】期末考试复习总结

KirinLee_01 2024-01-21 原文

计算机图形学期末复习题(答案已更新)

一、选择题

  1. 下面哪一项不属于计算机图形学的应用范围?( )
    A. 计算机动画
    B. 从遥感图像中识别道路等线划数据
    C. QuickTime 技术
    D. 影视动画制作

  2. 数字化仪是一种( )坐标定位设备。
    A. 绝对
    B. 笛卡儿
    C. 相对
    D. 球

  3. 下列设备中属于图形输出设备的是( )。
    (1) 鼠标
    (2) LCD 显示器
    (3) 键盘
    (4) LED 显示器
    (5) 打印机
    (6) 扫描仪
    (7)绘图仪
    (8) 触摸屏
    A. (1)(3)(6)(8)
    B. (2)(4)(5)(7)
    C. (2)(5)(6)(7)
    D. (4)(6)(7)(8)

  4. 下列关于反走样的方法中论述错误的是( )。
    A. 提高分辨率
    B. 把像素当作平面区域进行采样
    C. 增强图像的显示亮度
    D. 采用特定形状的滤波器进行加权区域采样

  5. 如果一幅 512×512 像素的图像,每一像素用 4 位表示,那么存储此图像至少需要的容量为( )。
    A. 512KB
    B. 1MB
    C. 2MB
    D. 3MB

  6. GKS 是一种( )。
    A. 绘图软件
    B. 图形函数库
    C. 图形标准
    D. 图形设备

  7. 生成直线的 DDA 算法中,当斜率 k≤1 时,x 方向的增量Δx 和 y 方向的增量Δy 分别是( )。
    A. ±k 和±1
    B. ±1 和±1/k
    C. ±1 和±k
    D. ±1/k 和±1

  8. 在计算机图形处理中,曲线的描述一般采用( )。
    A. 隐式方程
    B. 显式方程
    C. 参数方程
    D. 极坐标方程

  9. 下述关于 Bezier 曲线 P1(t),P2(t)(t∈[0,1])的论述错误的是( )。
    A. P1(1)=P2(0)=P,在 P 处 P1(1)、P2(0)的切矢量方向相同,大小相等,则 P1(t),P2(t)在 P 处具有 G1 连续;
    B. P1(1)=P2(0)=P,在 P 处 P1(1)、P2(0)的切矢量方向相同,大小相等,则 P1(t),P2(t)在 P 处具有 C1 连续;
    C. 若保持原全部顶点的位置不变,只是把次序颠倒过来,则新的 Bezier 曲线形状不变,但方向相反;
    D. 曲线的位置和形状只与特征多边形的顶点位置有关,不依赖于坐标系的选择。

  10. 任意增加控制点后,新生成的曲线段能自然达到C2连续,这是( )曲
    线的特性。
    A. 三次样条
    B. 抛物样条
    C. Bezier
    D. 三次 B 样条

  11. 下列关于 B 样条的叙述正确的是( )。
    A. B 样条曲线不具有凸包性;
    B. 给定 n 个型值点的三次 B 样条曲线可由 n-2 段三次 B 样条曲线段组成;
    C. B 样条曲线通过每一个给定的控制点;
    D. 二次 B 样条曲线的起点落在其 B 特征多边形的第一条边的中点。

  12. 齐次坐标技术就是 n 维空间中的物体可用( )齐次坐标来表示。
    A. n 维
    B. n-1 维
    C. n+1 维
    D. n+2 维

  13. 采用齐次坐标技术实现图形几何变换的优点是( )。
    A. 既可使矩阵变换满足结合率也可使矩阵变换满足交换率;
    B. 所有的图形变换都可以用矩阵加法来实现;
    C. 可使非线性变换也能采用线性变换来实现;
    D. 所有的图形变换都可以用矩阵乘法来实现。

  14. 矢量字符存储的是( )。
    A. 笔画的端点坐标
    B. ASCII 码
    C. 字符点阵的行或列编码
    D. 区位码

  15. 用 Weiler-Atherton 多边形裁剪算法进行裁剪,当主多边形和裁剪多边形的顶点序列都按顺时针方向排列时,正确的裁剪思想为( )。
    A. 遇到进点,沿主多边形按顺时针方向搜集顶点序列;
    B. 遇到进点,沿裁剪多边形按逆时针方向搜集顶点序列;
    C. 碰到出点,沿裁剪多边形按逆时针方向搜集顶点序列;
    D. 碰到出点,沿主多边形多边形按顺时针方向搜集顶点序列。

  16. 正平行投影和斜平行投影的主要区别是( )。
    A. 投影平面是否与坐标轴相交;
    B. 与坐标轴平行的线段是否以相同比例缩小;
    C. 投影线是否与投影平面垂直;
    D. 是否以 x 坐标轴和 y 坐标轴组成的 XOY 平面作为投影平面。

  17. 透视投影中的一点透视、两点透视和三点透视的划分是根据( )。
    A. 与投影平面相交的坐标轴的个数
    B. 与坐标轴平行的图形线段的缩小比例
    C. 投影线与平面形成的角度
    D. 投影中心与投影平面的距离

  18. 下面关于深度缓存消隐算法(Z-Buffer)的论断( )不正确?
    A. 深度缓存算法并不需要开辟一个与图像大小相等的深度缓存数组;
    B. 深度缓存算法利用了相关性;
    C. 深度缓存算法能并行实现;
    D. 深度缓存算法中没有对多边形进行排序。

  19. 在简单光照模型中,由物体表面上点反射到视点的光强是下述哪几项之和?( )
    (1) 环境光的反射光强;
    (2) 理想漫反射光强;
    (3) 镜面反射光强;
    (4) 物体间的反射光强。
    A. (1)和(2)
    B. (1)和(3)
    C. (1)(2)和(3)
    D. (1)(2)(3)和(4)

  20. 双线性法向量插值法(Phong 方法)的优点是( )。
    A. 法向计算精确
    B. 高光域准确
    C. 对光源和视点没有限制
    D. 速度较快

参考答案

  1. B:从遥感图像中识别道路等线划数据
  2. A:绝对
  3. B:2、4、5、7
  4. C:增强图像的显示亮度
  5. B:1MB
  6. C:图形标准
  7. C:±1和 ±k
  8. C:参数方程
  9. A:P1(1)=P2(0)=P,在P处P1(1)、P2(0)的切矢量方向相同,大小相等,P1(t),P2(t)在P处具有G1连续
  10. D:三次B样条
  11. D:二次B样条曲线的起点落在其B特征多边形的第一条边的中点
  12. C:n+1维
  13. D:所有的图形变换都可以用矩阵乘法来实现
  14. A:笔画的端点坐标
  15. A:遇到进点,沿主多边形的顺时针方向搜集顶点序列
  16. C:投影射线是否与投影平面垂直
  17. A:与投影平面相交的坐标轴的个数
  18. B:深度缓存算法利用了相关性
  19. C:(1)、(2)和(3)【环境,镜面,漫反射】
  20. B:高光域准确

二、填空题

  1. 一个交互式计算机图形系统应具有________、存储、输入、输出和________等五个方面的功能。
  2. 屏幕上最小的发光单元叫做________,它的多少叫做________。
  3. 光栅扫描显示器在水平和垂直方向上能够识别出的最大象素数称为________。
  4. 多边形的表示方法包括________和________。
  5. 区域的表示有________和边界表示两种形式。
  6. 基本几何变换中的平移、旋转、比例变换等都是相对于________和_____进行的几何变换。
  7. 字符作为图形有________和矢量字符之分。
  8. 用户域是程序员用来定义图形的整个自然空间,________是用户指定的任一局部区域;屏幕域是设备输出图形的最大区域,________是任一小于或等于屏幕域的区域。
  9. 为保证实体的有效性,用于实体构造的集合运算应采用________集合运算。
  10. 通过实体的边界来表示一个实体的方法称为__________。
  11. 工程制图中的三视图包括主视图、侧视图和________。
  12. 简单光照模型仅模拟光源在物体表面产生的_______的光照效果。
  13. 简单光照模型可以模拟_____、______、______等三种反射产生的光照效果。

参考答案

  1. 计算、对话
  2. 像素点、分辨率
  3. 分辨率
  4. 顶点表示、点阵表示
  5. 内点表示
  6. 坐标原点、坐标轴
  7. 点阵字符
  8. 窗口、视图区
  9. 正则化
  10. 边界表示法
  11. 俯视图
  12. 反射光
  13. 环境反射 、 漫反射、镜面反射

三、应用题

论述与应用题复习内容(既需要掌握理论内容,还需要会应用):

  1. 生成直线的 Bresenham 算法
  2. 三次参数样条曲线
  3. B 样条曲线
  4. 二维图形几何变换
  5. 三维图形几何变换
  6. 字符的表示与裁剪
  7. 扫描表示法
  8. 正投影
  9. 消隐算法常用的技术
  10. 提高消隐算法效率的方法

参考例题及答案:

1.生成直线的 Bresenham 算法

算法描述如下:

int  x1,y1,x2,y2;
int  x;
double  dx,dy,k,y;
dx=x2 - x1
dy=y2 - y1
k=dy/dx
x=x1
y=y1
for (  ;x<=x2;x++)
{ 
      putpixel (x,(int)(y+0.5),pixelcolor )
      y=y+k
}

# 该算法仅适用于|k|≤1 的情况,而当|k|>1时,则需将 x 和 y 的位置交换。

——> 例题1:

——> 例题2:

——> 例题3:

2. 三次参数样条曲线

试题考察内容为 推导

Hermite曲线要求给出端点处的切线矢量,给使用带来不便,但它是三次参数样条曲线的基础。若有一组离散点列P1,P2,….,Pi-1,Pi,Pi+1,….,Pn ,要求用一系列Hermite曲线段,通过这些点列,构成一条三次参数样条曲线。n 个点可绘制出 n – 1 段Hermite曲,其中第 i 段曲线的
起点和终点分别为 Pi 和 Pi+1 ;第 i+1 段曲线为Pi+1和Pi+2 。若要求两曲线连接处达到C2,通过推导,可得如下关系式: Pi´+ 4Pi+1´+ Pi+2´ = 3( Pi+2 – Pi )。


但这组联立方程中有 n 个未知数,为求解,必须再给出两个边界条件。常用的边界条件有自由端、夹持端和抛物端等。以自由端为例,这种情况下,两端点处的二阶导数为零,即 P1" = Pn " = 0。自由端三次参数样条曲线的矩阵表示式为:

解方程组,可得各型值点处的切线向量 Pi ’ (1 ≤ i ≤ n)。

3.B样条曲线

B样条曲线是Bezier曲线的拓广,它是用B样条基函数代替了Bezier曲线表达式中的Bernstain基函数。在空间给定n+1个点的位置向量Pi (i=0,1,2,……n, n>=k),则称参数曲线:
为k阶(或k-1次)的B样条曲线。其中Ni,k(t)为B样条基函数。给定的n+1个点为B样条曲线的控制顶点,由其构成的多边折线称B特征多边形。

二次B样条曲线的端点特性与Bezier曲线不同,它是以二次B特征多边形的二边上的中点为其起点和终点,并在端点处与二边相切。

由三个控制顶点(P0、P1、P2)确定的一条二次B样条曲线是一条抛物线,如果再增加一个控制顶点P3,就可由P1、P2、P3三个控制顶点生成第二条二次B样条曲线。由于第一条二次B样条曲线的终点就是第二条二次B样条曲线的起点,而且它们有一条公共的切线P1P2,所以二条二次B样条曲线在切点衔接处达到C1连续。


三次B样条曲线的端点特性:


三次B样条曲线的连续性:
在已有的三次B样条曲线的基础上,增加一个控制点,就可相应地增加一段B样条曲线,并自然地达到 C2 连续。

三次B样条曲线的绘制技巧—— 在三次B样条曲线的设计中,常会遇到以下几种情况:

  • 要在某处使曲线段与特征多边形相切

  • 要在某处使曲线形状出现一个尖点或通过某一个角点

  • 要在某处使曲线出现一个拐点(制图中所谓的反向弧切接)

  • 要在某处使曲线形状中切接入一段直线 ……
    运用角点重叠和角点共线的技巧。

    例如:
    二重角点 三角点共线
    三重角点 四角点共线

4.二维图形基本变换

基本知识:














考 试 题:

——> 例题1:

——> 例题2:

——> 例题3:

5.三维图形变换

基本知识:










——> 例题1:

——> 例题2:
假定一空间直线 AB 的两端点坐标为A(0, 0, 0)和B(2, 2, 2),试写出绕 AB 旋转 30°的三维复合变换矩阵。

分析:三维空间中绕任意轴旋转是较为复杂的过程。在经过平移使轴通过原点之后,通常需要经过两次旋转才能使轴与某个坐标轴重合:第一次将轴与某个坐标轴构造成一个面,并将这个面绕这个坐标轴旋转到某个坐标平面内,然后在该坐标平面中通过旋转使轴与该平面中的任意一个坐标轴重合;在绕轴旋转之后需要反旋转使轴回到原来的方向,最后反平移使轴回到原始的位置。这里需要注意旋转角度的正负以及角度值的确定。

解:变换步骤如下:
(1)将 ABB’绕 x 轴逆时针旋转 α 角,则 AB 旋转到 xoz 平面上。

(2)将 OB 绕y 轴顺时针旋转 β 角,则 OB 旋转到 z 轴上。

(3)此时 AB 轴与 z 轴重合,绕 AB 轴的旋转转换为绕 z 轴的旋转。

(4)最后,求 TRx,TRy 的逆变换,回到 AB 原来的位置。

最后的变换矩阵是这 5 个矩阵相乘的形式:

6.字符裁剪方法

  1. 字符的表示方法
    点阵字符——每个字符用一个位图(掩膜) 来表示,其大小由位图的尺寸来确定,如 7 × 9,9 × 16,16 × 24 等。

    矢量字符—— 选一个正方形网格,作为字符的局部坐标空间,网格的大小可选16 × 16,32 × 32,64 × 64等。每个字符由构成它的笔画组成,每个笔画又由其两端确定。每个端点保存它的坐标值及连线标志。

    特点:除用直线段表示笔画外,还可采用二次三次曲线段。对矢量字符的变换是对其端点进行图形的几何变换。
  2. 字符的裁剪
    简单裁剪方法:
    用点阵字符的掩膜或矢量字符的网格大小作为字符的包围框,若该包围框在窗口内,则显示字符;否则,不予显示。
    精确裁剪方法:
    对于点阵字符,判断组成其笔画的每个像素点是否位于窗口内。
    对于矢量字符,对组成其笔画的每条线段进行裁剪。

7.扫描表示法

8.正投影

9.消隐算法常用的技术

10.提高消隐算法效率的常用方法

  1. 利用相关性(连贯性)
    物体的相关性:若物体 A 与物体 B 是完全相互分离的,消隐时只需比较 A 、 B 两物体之间的遮挡关系,而不需对其表面多边形逐一进行测试。
    面的相关性:一个面内的各种属性值(坐标值、灰度值等)一般都是缓慢变化的,可采用简单增量方式进行计算。
    区域相关性:一个区域是指屏幕上一组相邻的像素,它们通常属于同一个可见面。区域相关性表现在一条扫描线上时,即为扫描线上的每个区间内只有一个面可见。
    扫描线相关性:在相邻的两条扫描线上,可见面的分布情况相似。
    深度相关性:物体的同一表面上的相邻部分深度是相近的。
  2. 包围盒技术
    用于对物体间的某些关系进行比较和测试,从而可避免盲目的求交运算,减少计算量,提高效率。
    二维图形 ----- 包围框(重叠测试);
    三维物体 ----- 包围盒、包围球。
  3. 背面剔除
  4. 活化表技术
    设置活化表,用于存放与当前的处理相关的信息,从而可最大限度地缩小处理范围,提高算法的效率。

有关【计算机图形学】期末考试复习总结的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  2. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  3. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  4. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  5. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  6. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  7. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

  8. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  9. ruby-on-rails - 如何计算 Ruby/Rails 中 JSON 对象的数量 - 2

    Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包

  10. ruby - 如何计算自 Ruby 中给定日期以来的周数? - 2

    目标我正在尝试计算自给定日期以来周的距离,而无需跳过任何步骤。我更喜欢用普通的Ruby来做,但ActiveSupport无疑是一个可以接受的选择。我的代码我写了以下内容,这似乎可行,但对我来说似乎还有很长的路要走。require'date'DAYS_IN_WEEK=7.0defweeks_sincedate_stringdate=Date.parsedate_stringdays=Date.today-dateweeks=days/DAYS_IN_WEEKweeks.round2endweeks_since'2015-06-15'#=>32.57ActiveSupport的#weeks

随机推荐