最新《计算机图形学》练习题答案资料.docx
《最新《计算机图形学》练习题答案资料.docx》由会员分享,可在线阅读,更多相关《最新《计算机图形学》练习题答案资料.docx(28页珍藏版)》请在冰豆网上搜索。
最新《计算机图形学》练习题答案资料
《计算机图形学》练习题
1.直线扫描转换的Bresenham算法
(1)请写出生成其斜率介于0和1之间的直线的Bresenham算法步骤。
(2)设一直线段的起点和终点坐标分别为(1,1)和(8,5),请用Bresenham算法生成此直线段,确定所有要绘制象素坐标。
(1)①输入线段的两个端点,并将左端点存储在(x0,y0)中
②将(x0,y0)装入帧缓存,画出第一个点
③计算常量∆x,∆y,2∆y,and2∆y-2∆x,并得到决策参数的第一个值:
p0=2∆y-∆x
④从k=0开始,在沿线路径的每个xk处,进行下列检测:
如果pk<0,下一个要绘制的点就是(xk+1,yk),并且pk+1=pk+2∆y
否则下一个要绘制的点就是(xk+1,yk+1),并且pk+1=pk+2∆y-2∆x
⑤重复步骤4,共∆x-1次
(2)m=(5-1)/(8-1)=0.57
x=7
y=4
P0=2
y-
x=1
2
y=82
y-2
x=-6
k
pk
(xk+1,yk+1)
0
1
(2,2)
1
-5
(3,2)
2
3
(4,3)
3
-3
(5,3)
4
5
(6,4)
5
-1
(7,4)
6
7
(8,5)
2.已知一多边形如图1所示,其顶点为V1、V2、V3、V4、V5、V6,边为E1、E2、E3、E4、E5、E6。
用多边形的扫描填充算法对此多边形进行填充时(扫描线从下到上)要建立边分类表(sortededgetable)并不断更新活化边表(activeedgelist)。
(1)在表1中填写边分类表中每条扫描线上包含的边(标明边号即可);
(2)在表2中写出边分类表中每条边结构中各成员变量的初始值
(3)指出位于扫描线y=6,7,8,9和10时活化边表中包含那些边,并写出这些边中的x值、ymax值、和斜率的倒数值1/m。
表1边分类表
Y值(ScanLineNumber)
边(EdgeNumber)
1
0
2
0
3
0
4
E1
5
E6,E2
6
E6
7
E3
8
E5,E3
9
E4
10
0
1
2
3
4
5
6
7
8
9
10
表2边的初始值
边
x
ymax
1/m
4
119
746
00
5
19
76
00
6
19
66
00
7
118
779
01-1
8
27
99
1-1
9
336
999
1-1
3.二维变换
(1)记P(xf,yf)为固定点,sx、sy分别为沿x轴和y轴方向的缩放系数,请用齐次坐标(HomogeneousCoordinate)表示写出二维固定点缩放变换的变换矩阵。
(2)把以A(0,0)、B(1,1)和C(5,2)为顶点的三角形以顶点C为固定点放大2倍。
求出放大后的三角形的顶点坐标。
(1)
(2)①平移这个对象,使得他的固定点与原点重合
②缩放这个在坐标原点的对象
③平移这个对象,使得他的固定点回到原始位置
所以A(-5,-2)B(-3,0)C(5,2)
4二维变换
(1)请用齐次坐标表示写出点Q(x,y)绕定点P(a,b)旋转的旋转变换矩阵。
(2)求出以A(0,0)、B(1,1)和C(5,2)为顶点的三角形绕固定点P(-1,-1)点旋转450后的三角形的顶点坐标。
(1)
x’=xr+(x-xr)cosθ-(y-yr)sinθ
y’=yr+(x-xr)sinθ+(y-yr)cosθ
(2)①平移这个对象,使得他的固定点与原点重合
②旋转这个在坐标原点的对象
③平移这个对象,使得他的固定点回到原始位置
A(-1,-1+
)B(-1,-1+2
)C(-1+3/2*
-1+9/2*
)
5.如图所示,L(-3,1)和R(2,6)为正方形裁剪窗口两个对角线角点,线段AB、CD、EF、GH和IJ为被裁剪线段。
用Cohen-Sutherland线裁剪算法进行裁剪时要对线段的端点进行编码。
(1)请写出编码规则,并在图中标出相应区域的编码
(2)分别指出于点A、B、C、D、E、F、G、H对应的编码
(3)根据线段端点的编码对图中所有线段分类,指出哪些线段是可见的?
哪些是不可见的?
哪些是候选的裁剪线段。
D(3,8)
B(-1,7)
I(-4,7)
R(2,6)
C(-1,5)
E(-2,3)
民族性手工艺品。
在饰品店里,墙上挂满了各式各样的小饰品,有最普通的玉制项链、珍珠手链,也有特别一点如景泰蓝的手机挂坠、中国结的耳坠,甚至还有具有浓郁的异域风情的藏族饰品。
H(3,3)
“碧芝”隶属于加拿大的beadworks公司。
这家公司原先从事首饰加工业,自助首饰的风行也自西方,随着人工饰品的欣欣向荣,自制饰品越来越受到了人们的认同。
1996年'碧芝自制饰品店'在迪美购物中心开张,这里地理位置十分优越,交通四八达,由于是市中心,汇集了来自各地的游客和时尚人群,不用担心客流量问题。
迪美有300多家商铺,不包括柜台,现在这个商铺的位置还是比较合适的,位于中心地带,左边出口的自动扶梯直接通向地面,从正对着的旋转式楼拾阶而上就是人民广场中央,周边4、5条地下通道都交汇于此,从自家店铺门口经过的90%的顾客会因为好奇而进看一下。
(2)物品的独一无二
自制性手工艺品。
自制饰品其实很简单,工艺一点也不复杂。
近两年来,由于手机的普及,自制的手机挂坠特别受欢迎。
A(-4,2)
世界上的每一个国家和民族都有自己的饰品文化,将这些饰品汇集到一起再进行新的组合,便可以无穷繁衍下去,满足每一个人不同的个性需求。
10、如果学校开设一家DIY手工艺制品店,你希望_____
F(1,2)
(一)大学生的消费购买能力分析
培养动手能力□学一门手艺□打发时间□兴趣爱好□
“碧芝”最吸引人的是那些小巧的珠子、亮片等,都是平日里不常见的。
据店长梁小姐介绍,店内的饰珠有威尼斯印第安的玻璃珠、秘鲁的陶珠、奥地利的施华洛世奇水晶、法国的仿金片、日本的梦幻珠等,五彩缤纷,流光异彩。
按照饰珠的质地可分为玻璃、骨质、角质、陶制、水晶、仿金、木制等种类,其造型更是千姿百态:
珠型、圆柱型、动物造型、多边形、图腾形象等,美不胜收。
全部都是进口的,从几毛钱一个到几十元一个的珠子,做一个成品饰物大约需要几十元,当然,还要决定于你的心意尽管售价不菲,却仍没挡住喜欢它的人。
1996年“碧芝自制饰品店”在迪美购物中心开张,这里地理位置十分优越,交通四通八达,由于位于市中心,汇集了来自各地的游客和时尚人群,不用担心客流量的问题。
迪美有300多家商铺,不包括柜台,现在这个商铺的位置还是比较合适的,位于中心地带,左边出口的自动扶梯直接通向地面,从正对着的旋转式楼梯阶而上就是人民广场中央,周边4、5条地下通道都交汇于此,从自家店铺门口经过的90%的顾客会因为好奇而进去看一下。
L(-3,1)
1
-1
1
3
-1
G(1,-2)
(1)
1001
1000
1010
0001
0000
0010
0101
0100
0110
(2)
A:
0001
B:
1000
C:
0000
D:
1010
E:
0000
F:
0000
G:
0100
H:
0010
I:
1000
J:
1000
(3)
可见的:
EF
不可见的:
GH,IJ
候选的:
AB,CD
6.分别用Sutherland-Hodgman算法和Weiler-Atherton算法裁剪图1所示的多边形p1p2p3p4p5p6p7p8p9p1,裁剪窗口为如图所示的矩形窗口。
要求:
(1)用实线分别在图1(a)(b)(c)(d)中绘出用Sutherland-Hodgman算法沿裁剪窗口的左、右、上、下窗口边裁剪后的中间结果
(2)用Weiler-Atherton算法对图1所示的多边形进行裁剪,以p1为起点,以图1箭头所示的方向为走向,在图1(e)中用箭头表示画出所有走过的边(包括多边形边和窗口边)及其走向;并在图1(f)中用实线绘出最后裁剪结果。
7.简述多边形扫描填充算法基本原理和大致步骤,并以具体例子说明边分类表内容、扫描过程中活化边表的信息变化。
(1)原理:
在直角坐标系中,假设有一条从左至右的扫描线穿过多边形,从左至右开始计数,与多边形交点为奇数时,开始进入多边形,与多边形交点为偶数时,走出多边形。
这样在这相邻配对的奇偶交点间的所有象素都在多边形内。
如图,奇数交点a,c,都是入多边形,偶数交点b
,d都是走出多边形,相邻的奇偶交点配对,a,b之间,c,d之间的象素都多边形内,可见一条扫描线上,与多边形交点个数需要为偶数。
依据这样的思路,扫描线从上到下从左到右依次扫过多边形即可求得多边形所占据的象素。
(注意退化情况的处理,也就是扫描线刚
好经过顶点或者多边形的边本身就是水平的情况)
(2)步骤:
1)输入多边形的顶点的坐标
2)建立边表(ET)
3)初始化Y值
4)初始化活性边表(AEL),设置为空
5)每个扫描线从底部到顶部,做以下步骤直到ET和AEL是空的:
①建立AEL
②设置颜色
③更新AEL:
当Y= YMAX时,删除边
x= x+∆X
Y = y+1
④返回AEL
(3)例子:
8.由坐标A(0,0,0),B(1,0,0),C(0,1,0),D(0,01)确定的锥体绕直线L旋转450,其中L的方向为V=J+K,且通过点C(0,1,0)。
写出锥体旋转后的坐标。
9.设3次参数多项式函数P(u)=au3+bu2+cu+d,求出满足下列边界条件的3次Hermite插值曲线(用矩阵表示):
P(0)=Pk
P
(1)=Pk+1
P’(0)=DPk
P’
(1)=DPk+1
10.Cohen-Sutherland直线段裁剪算法和Liang-Barsky直线段裁剪算法是直线段裁剪的两种基本算法,试述两种算法的基本原理,并分析它们的优点和不足。
(1)通过一个矩形的裁剪区域将整个屏幕分成9个部分,并为每一个部分赋予相应的区域码,然后根据端点的位置确定这个端点的区域码。
先判断能否完全接受或者完全排除一条线段,若以上2个判断无法直接得出,则逐步裁剪,选取一个位于裁剪区外的端点,把端点的区域码和裁剪边界的区域码进行逻辑与运算,若结果为真,则端点在该裁剪边界外部,这时将端点移向线段和该边界的交点处,如此循环,直到裁剪结束。
(2)利用线段的参数表达形式直接判别落在窗口内的部分线段.
大体上有以下几步,有些步骤依据中间的判断结果可以省略或跳转.
第一步:
计算出pk和qk(k=1,2,3,4)
第二步:
看pki的符号进行判断
第三步:
计算u1=max(0,qk/pk),u2=min(1,qk/pk)
如果,u2>u1,则线段是可见的
第四步:
利用u1和u2计算端点坐标
(3)比较:
Cohen-Sutherland:
直观方便,速度较快
多次重复计算线段与裁剪窗口边界的交点,计算量大
采用位逻辑乘,在有些高级语言中不便进行
全部舍弃的判断仅适用于那些仅在窗口的线段,不适合跨越三个区域的
线段,就不能一次做出判别
Liang-Barsky:
所需计算量小,更有效
可以扩展成三维裁剪算法
只能应用于矩阵窗口的情形
10.简述Bezier曲线与B-Spline曲线的异同点,指出他们的特点和不足。
11.DDA算法和Bresenham算法是两种直线生成的基本算法,试述两种算法的基本原理,并分析它们的优点和不足。
(1)DDA算法:
①选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的增量为一个象素单位(△x=1),
②利用式(2-1)计算另一个方向的增量(△y=△x·m=m)。
通过递推公式(2-2)至(2-5),把每次计算出的(xi+1,yi+1)经取整后送到显示器输出,则得到扫描转换后的直线。
③之所以取x2-x1和y2-y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。
④另外,算法实现中还应注意直线的生成方向,以决定Δx及Δy是取正值还是负值。
(2)Bresenham算法:
假定直线斜率k在0~1之间。
此时,只需考虑x方向每次递增1个单位,决定y方向每次递增0或1。
设:
直线当前点为(xi,y)
直线当前光栅点为(xi,yi)
则:
下一个直线的点应为(xi+1,y+k)
下一个直线的光栅点为右光栅点(xi+1,yi)(y方向递增量0)或为右上光栅点(xi+1,yi+1)(y方向递增量1)
(3)优缺点:
DDA算法:
算法简单,实现容易
由于在循环中涉及实型数的运算,因此生成直线的速度较慢。
浮点数运算
不易硬件实现
Bresenham算法:
不必计算直线之斜率,因此不做除法;
不用浮点数,只用整数;
只做整数加减法和乘2运算,而乘2运算可以用硬件移位实现.
算法速度很快,并适于用硬件实现.
12.简述直线段裁剪与多边形裁剪的异同点。
多边形的剪裁比直线剪裁复杂。
如果按照直线剪裁算法对多边形的边作剪裁,剪裁后的多边形的边就会成为一组彼此不连贯的折线,从而给填色带来困难。
多边形剪裁算法的关键在于,通过剪裁,不仅要保持窗口内多边形的边界部分,而且要将窗框的有关部分按一定次序插入多边形的保留边界之间,从而使剪裁后的多边形的边仍然保持封闭状态,以便填色算法得以正确实现
13.在计算机辅助设计与图形学中,样条曲线通常采用3次多项式参数表示,请说明理由。
14.图形学中消隐算法有两大类,z缓冲器(z-buffer)算法属于哪一类?
请阐述它的基本原理和特点。
(1)属于图像空间消隐
(2)基本原理:
Z缓冲器中每个单元的值是对应象素点所反映对象的z坐标值。
Z缓冲器中每个单元的初值取成z的极小值,帧缓冲器每个单元的初值可放对应背景颜色的值。
图形消隐的过程就是给帧缓冲器和Z缓冲器中相应单元填值的过程。
在把显示对象的每个面上每一点的属性(颜色或灰度)值填入帧缓冲器相应单元前,要把这点的z坐标值和z缓冲器中相应单元的值进行比较。
只有前者大于后者时才改变帧缓冲器的那一单元的值,同时z缓冲器中相应单元的值也要改成这点的z坐标值。
如果这点的z坐标值小于z缓冲器中的值,则说明对应象素已经显示了对象上一个点的属性,该点要比考虑的点更接近观察点。
对显示对象的每个面上的每个点都做了上述处理后,便可得到消除了隐藏面的图
(3)特点:
优点:
(1)算法复杂度(O(nN)):
对于给定的图像空间,N是固定的,所以算法复杂度只会随着场
景的复杂度线性地增加
(2)无须排序:
场景中的物体是按任意顺序写入帧缓冲器和z缓冲器的,无须对物体进行
排序,从而节省了排序的时间
(3)适合于任何几何物体:
能够计算与直线交点
(4)适合于并行实现(硬件加速)
不足:
(1)z缓冲器需要占用大量的存储单元:
一个大规模复杂场景中:
深度范围可能为106,一个像素需要24bit来存储其深度信息。
如果显示分辨率为1280×1024,那么深度缓冲器需要4MB存储空间
(2)深度的采样与量化带来走样现象
(3)难以处理透明物体
解决存储问题:
逐区域进行z缓冲器消隐(A-Buffermethod:
accumulationbuffer)
16.OpenGL库函数由哪几部分组成,请简单说说各部分的分工。
(1)OpenGL核心库
核心库包含有115个函数,函数名的前缀为gl。
这部分函数用于常规的、核心的图形处理。
(2)OpenGL实用库The OpenGL Utility Library (GLU)
包含有43个函数,函数名的前缀为glu。
OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点。
线、面开始。
Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。
(3)OpenGL辅助库
包含有31个函数,函数名前缀为aux。
这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。
(4)OpenGL工具库OpenGL Utility Toolkit
包含大约30多个函数,函数名前缀为glut。
glut是不依赖于窗口平台的OpenGL工具包,由Mark KLilgrad在SGI编写,目的是隐藏不同窗口平台API的复杂度。
函数以glut开头,它们作为aux库功能更强的替代品,提供更为复杂的绘制功能