第一章
1简述随机扫描显示器和光栅扫描显示器的工作原理和特点。 随机扫描显示器 工作原理:从显示文件存储器中去处画线指令或显示字符指令、方式指令(如高度、线性等),送到显示控制器,由显示控制器控制电子束的偏转,轰击荧光屏上的荧光材料,从而产生一条发亮的图形轨迹。
特点:随机扫描显示器中电子束的定位和偏转具有随机性,在某一时刻,显示屏上只有一个光点发光,因而可以画出很细的图形。 光栅扫描显示器
工作原理:在这种显示器中,电子束的运动轨迹是固定的。即从左到右、自上而下扫描荧光屏,来产生一幅光栅。 特点:由于图形是以点阵的形式存储在帧缓冲器中。所以光栅扫描显示器的电子束按从上到下、从左到右的顺序依次扫描屏幕,来建立图形。
2为什么要制定和采用计算机图形标准?经国际标准化组织批准的计算机图形标准软件有哪些?
为了提高计算机图形软件、计算机图形的应用软甲以及相关软件的编程人员在不同的计算机和图形设备之间的可移植性。
已获ISO批准的计算机图形标准软件有: 计算机图形核心系统(GKS)及其语言联编;
程序员层次交互式图形系统(PHIGS)及其语言联编; 三围图形核心系统(GKS-3D)及其语言联编; 计算机图形元文件(CGM); 计算机图形接口(CGI); 基本图形转换规范(IGES); 产品数据转换规范(STEP)
3计算及图形显示器和绘图设备表示颜色时各使用什么颜色系统?它们之间的关系如何? 计算机图形显示器是用RGB方法表示颜色,而绘图设备是用CMY方法来表示颜色的。 它们之间的关系是:两者都是面向硬件的颜色系统,前者是增性原色系统,后者是减性原色系统,后者是通过在黑色里加入一种什么颜色来定义一种颜色,而后者是通过指定从白色里减去一种什么颜色来定义一种颜色。
4简述帧缓冲存储器与显示器分辨率的关系。分别率分别为640*480、1280*1024和2560*2048的显示器,各需要多少位平面数为24的帧缓冲存储器? 帧缓存的大小和显示器分辨率之间的关系是:帧缓存的大小=(显示器分辨率的大小*帧缓存的位平面数)/8。
640*480: (640*480*24)/8=921600
1280*1024: (1280*1024*24)/8=3932160 2560*2048: (2560*2048*24)/8=15728640
第二章
1DDA法生成直线的基本原理是什么?
DDA算法主要是根据直线公式y = kx + b来推导出来的,其关键之处在于如何设定单位步进,即一个方向的步进为单位步进,另一个方向的步进必然是小于1。算法的具体思路如下: 1. 输入直线的起点、终点;
2. 计算x方向的间距:△X和y方向的间距:△Y。
3. 确定单位步进,取MaxSteps = max(△X,△Y); 若△X>=△Y,则X方向的步进为单位步进,X方向步进一个单位,Y方向步进△Y/MaxSteps;否则相反。 4. 设置第一个点的像素值
5. 令循环初始值为1,循环次数为MaxSteps,定义变量x,y,执行以下计算:
a. x增加一个单位步进,y增加一个单位步进 b. 设置位置为(x,y)的像素值
2为什么说Bresenham画圆的算法效率比较高?
Bresenham算法是DDA算法画线算法的一种改进算法。本质上它也是采取了步进的思想。不过它比DDA算法作了优化,避免了步进时浮点数运算,同时为选取符合直线方程的点提供了一个好思路。首先通过直线的斜率确定了在x方向进行单位步进还是y方向进行单位步进:当斜率k的绝对值|k|<1时,在x方向进行单位步进;当斜率k的绝对值|k|>1时,在y方向进行单位步进。
3简述二维图形剪裁的基本原理及可选用的裁剪策略。 (1)直线的裁剪:
1、对直线两端点 p 1 , p 2 按各自所在的区域编码。p 1 和 p 2 的编码分别为 C 1 (p 1 )={a 1 , b 1 , c 1 , d 1 } ;C 2 (p 2 )={a 2 , b 2 , c 2 , d 2 };其中a i , b i , c i , d i 的值域为{1, 0}, i ∈{1, 2};
2、IF (ai=bi=ci=di=0) 则显示整条直线,取出下一条直线,返回步骤(1) ; 否则进入步骤(3) ;
3、IF |a1-a2|=1,则求直线与窗上边(y=Yw-max) 之交点,并删去交点以上部 分;IF |b1-b2|=1,则求直线与窗下边(y=Yw-min) 之交点,并删去交点以下部分; IF |c1-c2|=1,则求直线与窗右边(x=Xw-max)之交点,并删去交点以右部分;IF |d1-d2|=1,则求直线与窗左边(x=Xw-min) 之交点,并删去交点以左部分;
4、返回步骤1 。 (2)多边形的裁剪:
1、令多边形的顶点按边线顺时针走向排序:p 1 , p 2 , ?, p n 各边先与上窗边求 交。求交后删去多边形在窗之上的部分,并插入上窗边及其延长线的交点之间的 部分,从而形成一个新的多边形。然后,新的多边形按相同方法与右窗边相剪裁; 如此重复直至与各窗边都相剪裁完毕。
2. 多边形与每一条窗边相交,生成新的多边形顶点序列的过程,是一个对 多边形各顶点依次处理的过程。设当前处理顶点为 p,先前顶点为 s,多边形各 顶点的处理规则如下: 如果p 在窗边内侧,则保存p;否则不保存。如果p 和s 在窗边非同侧,则求交 点I,并将I 保存,并插入p 之前或s 之后。
(3)字符串的裁剪: 字符串的有或无剪裁: 根据字符串所含字符的个数,及字符的大小、间隔、轨迹,求出字符串的 外包围盒(box)。以外包围盒的边界极值与窗边极值比较而决定该字串的去留。
字符的有或无剪裁:
1. 先以字符串box 与窗边比较而决定字符串的全删、全留或部分保留。
2. 对部分保留的字串中,逐个测量字符的box 与窗边关系而决定该字符 的去留。 字符的精密剪裁:
1、用字符串box 与窗边相比较。决定字符串的全删、全留或部分删;
2、对部分保留的字符串中,逐个测量字符的 box 与窗边的关系,决定字 符的全删、全留或部分删;
3、对部分保留的字符的每一笔划,用直线剪裁法对窗边进行剪裁。
4画直线的算法有哪几种?画圆弧的算法有哪几种?写一个画带线宽的虚线程序。 画直线:
1) 逐点比较法;2)数值微分法;3)Bresenham算法 画圆弧:
1) 逐点比较法;2)角度DDA法;3)Bresenham算法 程序:
5写一个画饼分图的程序,用不同的颜色填充各个区域。 6写一个显示一串字符的程序。
7写出几种线裁剪算法。写出几种多边形裁剪算法。 8试写出能获得整数的Bresenham画线算法。
9利用线段裁剪的Cohen-Sutherlan算法,对线段AB进行裁剪。简述裁剪的基本过程。
第三章
1试用几种不同的顺序的简单几何变换,求出将平面上的以P1(x1,y1)、P2(x2,y2)为端点的直线段变换为x轴的变换矩阵,并说明其等效性。
斜率为 k = (y2-y1)/ x2-x1 ,可以使用以下几种方法进行变换: a. 先把它平移到原点处,再旋转成水平线。其变换矩阵为:
00??cos??1???sin?T??010??????x1?y11????0?cos?T????sin???0sin?cos?0sin?cos?00?0??(其中θ= arctag(k) ) 1??b. 先旋转,使它水平,再平移到X轴上。其变换矩阵为:
0??100??010?(其中Tx可由几何计算得出) 0????1????Tx01??sin?cos?00?0??(其中My = x1*(y2-y1)/(x2-x1)–y1) 1??c. 先平移,使原点在其所在的直线上,再旋转
?100??cos????sin?T??010?????0My1????0由计算结果可知,三者是等价的。
2证明二维点相对x轴做对称变换、又相对y=-x直线做对称变换完全等价于相对该点相对坐标远点做旋转变换。
二维点相对于X轴作对称变换的变换矩阵为T1,相对于直线y=-x作对称变换的矩阵为T2,故二维点相对x轴做对称变换、又相对y=-x直线做对称变换的变换矩阵为:
?0?10??100??010????0?10????100?
T2?T1???100????????001????001????001??同时,二维点相对于坐标原点作旋转变换的变换矩阵为:
?cos?T3???sin???0?sin?cos?00?0?? 1??故,当?=-90°时,T3?T2?T1,也即顺时针方向选择90°。
3分别写出平移、旋转、缩放及其组合的变换矩阵。 平移变换:
?x?y?z?1???xy?100?010z1???001??TxTyTz0?0????x?Tx0??1?y?Tyz?Tz1?
其中,Tx,Ty,Tz是物体在三个坐标方向上的位移量。 旋转变换: 绕Z轴旋转
?x?y?z?1???xy?cos???sin?z1???0??0sin?cos?0000100?0?? 0??1?0?0?? 0??1?0?0?? 0??1?绕X轴旋转
?x?y?z?1???xy0?1?0cos?z1???0?sin??0?0?cos??0z1???sin???00sin?cos?0绕Y轴旋转
?x?y?z?1???xy0?sin?100cos?00如果旋转所绕的轴不是坐标轴,设其为任意两点P1,P1所定义的矢量,旋转角度为?。则
可由7个基本变换组合构成:
1) T(-x1,-y1,-z1)使P1与原点重合; 2) RX(?),使P1P2落入平面XOZ内; 3) Ry(?),使P1P2与Z轴重合; 4) Rz(?),执行绕P1P2轴?角旋转; 5) Ry(??),3的逆操作; 6) RX(??),2的逆操作;
7) T(x1,y1,z1),1的逆操作
缩放变换:
?x?y?z?1???xy?Sx?0z1???0??00Sy0000Sz00?0?? 0??1?其中,Sx,Sy,Sz是物体在三个方向上的比例变化量。
4如何用几何变换实现坐标系的变换?
坐标系的变换,亦即将某一坐标系lcs1中的点?xw,yw,zw?变换为另一个坐标系lcs2下的坐标?xe,ye,ze?。若?xeyeze1???xwywzw1?V,V矩阵的推导分三步。
1) 将lcs1中的点变换到世界坐标系的矩阵M1:
?x_axis.xy_axis.xz_axis.xorg.x??x_axis.yy_axis.yz_axis.yorg.y??? ?x_axis.zy_axis.zz_axis.zorg.z???0001??x_axis,y_axis,z_axis为lcs1中x,y,z轴矢量在世界坐标系的表示,org为lcs1中原点在世界坐标系的表示
2) 将世界坐标系的点变换到lcs2中的点矩阵M2:
?x_axis.x?y_axis.x??z_axis.x?0?其中,
x_axis.yx_axis.zy_axis.yy_axis.zz_axis.yz_axis.z00a?b?? c??1?a??x_axis.x*org.x?x_axis.y*org.y?x_axis.z*org.za??y_axis.x*org.x?y_axis.y*org.y?y_axis.z*org.z a??z_axis.x*org.x?z_axis.y*org.y?z_axis.z*org.z