计算机图形学+机械工业出版社+徐长青+答案

  • 格式:doc
  • 大小:391.00 KB
  • 文档页数:18

计算机图形学 1 计算机图形学作业答案 第一章 序论

第二章 图形系统 1. 什么是图像的分辨率? 解答:在水平和垂直方向上每单位长度(如英寸)所包含的像素点的数目。

2. 计算在240像素/英寸下640×480图像的大小。 解答:(640/240)×(480/240)或者(8/3)×2英寸。

3. 计算有512×512像素的2×2英寸图像的分辨率。 解答:512/2或256像素/英寸。

第三章 二维图形生成技术 1. 一条直线的两个端点是(0,0)和(6,18),计算x从0变到6时y所对应的值,并画出结果。 解答:由于直线的方程没有给出,所以必须找到直线的方程。下面是寻找直线方程(y=mx+b)的过程。首先寻找斜率: m = ⊿y/⊿x = (y2-y1)/(x2-x1) = (18-0)/(6-0) = 3 接着b在y轴的截距可以代入方程y=3x+b求出 0=3(0)+b。因此b=0,所以直线方程为y=3x。

2. 使用斜截式方程画斜率介于0°和45°之间的直线的步骤是什么? 解答: (1) 计算dx:dx=x2-x1。 (2) 计算dy:dy=y2-y1。 (3) 计算m:m=dy/dx。 (4) 计算b: b=y1-m×x1 (5) 设置左下方的端点坐标为(x,y),同时将xend设为x的最大值。如果dx < 0,则x=x2、y=y2和xend=x1。如果dx > 0,那么x=x1、y=y1

和xend=x2。

(6) 测试整条线是否已经画完,如果x > xend就停止。 (7) 在当前的(x,y)坐标画一个点。 (8) 增加x:x=x+1。 (9) 根据方程y=mx+b计算下一个y值。 (10) 转到步骤(6)。

3. 请用伪代码程序描述使用斜截式方程画一条斜率介于45°和-45°(即|m|>1)之间的直线所需的步骤。 计算机图形学 2 解答: 假设线段的两个端点为(x1,y1)和(x2,y2),且y1 int x = x1, y = y1; float xf, m = (y2-y1)/(x2-x1), b = y1 - mx1; setPixel( x, y ); /*画一个像素点*/ while( y < y2 ) { y++; xf = ( y-b)/m; x = Floor( xf +0.5 ); setPixel( x, y ); }

4. 请用伪代码程序描述使用DDA算法扫描转换一条斜率介于-45°和45°(即|m| ≤1)之间的直线所需的步骤。 解答: 假设线段的两个端点(x1, y1)和(x2,y2),且x1 int x = x1, y; float yf = y1, m = ( y2 – y1) / ( x2-x1); while( x < = x2 ) { y = Floor( yf + 0.5 ); setPixel( x, y ); x++; yf = yf + m; }

5. 使用Bresenham算法画斜率介于0°和45°之间的直线所需的步骤。 解答: (1) 计算初始值: dx = x2-x1 Inc2 = 2(dy-dx) dy = y2-y1 d = Inc1 - dx Inc1 = 2dy (2) 设置左下方的端点坐标为(x,y),同时将xend设为x的最大值。如果dx < 0,则x=x2,y=y2和xend=x1。如果dx > 0, 那么x=x1、y=y1

和xend=x2。

(3) 在当前的(x,y)坐标画一个点。 (4) 判断整条线段是否已经画完,如果x=xend就停止。 (5) 计算下一像素的位置。如果d<0,那么d=d+Inc1。如果d≥0,那么d=d + Inc2,并且y=y+1。 (6) 增加x:x=x+1。 (7) 在当前的(x,y)坐标画一个点。 (8) 转到步骤(4)。

6. 请指出用Bresenham算法扫描转换从像素点(1,1)到(8,5)的线段时的像素位置。 计算机图形学 3 解答: 首先必须找到初始值。在这个例子中, dx = x2-x1 = 8-1 = 7 dy = y2-y1 = 5-1 = 4 因此, Inc1= 2dy = 2×4 = 8 Inc1=2(dy-dx)= 2×(4-7)=-6 d=Inc1-dx=8-7=1

7. 使用Bresenham算法扫描转换圆的步骤是什么? 解答: (1) 设置初始变量:(h,k)=圆心坐标;x=0;y=圆的半径r;d=3-2r。 (2) 测试整个圆是否已经扫描转换完。如果x>y就停止。 (3) 以中心(h,k)为对称点,对当前的(x,y)坐标画8个圆上的点: plot( x + h, y + k ) plot( -x + h, -y + k ) plot( y+ h, x +k ) plot( -y + h, -x + k ) plot( -y + h, x + k ) plot( y + h, -x + k ) plot( -x + h, y + k ) plot( x + h, -y + k ) 其中plot(a,b)表示以给定的参数为中心画一个小块。 (4) 计算下一个像素的位置。如果d < 0,那么d=d+4x+6和x=x+1。如果d≥0,那么d=d+4(x-y)+10、x=x+1和y=y-1。 (5) 转到步骤(2)。 8. 给定数据点P0(0,0),P1(1,2)P2(2,1)P3(3,-1)P4(4,10)P5(5,5),用三次B样条插值法插值这些数据点,求出曲线,并找出定义三次B样条的节点集t0,……,t9。 解答: m=3, n=5,选择节点集可以有两种方案: (1) 选择:

)(103210xtttt, )(69876nxtttt 其余的节点按以下方式选择:

1,......,0,...11mnimxxtmiimi

故: 23321t, 33432t (2) 三次样条的另一种方案是: 13210tttt, 69876tttt 其余节点按以下方式选择:

24iixt,I=0,……,n-4 故: t4=2, t5=3 计算机图形学 4 两种方法选择节点集,其根据是数据点沿x轴为等间距。 第四章 图形的裁剪及几何变换 1. 写出实现下述映射的规范化变换,将左下角在(1,1),右上角在(3,5)的窗口

映射到(a)规范化设备的全屏幕视区;(b)左下角在(0,0),右上角在21,21的视区。 解答:

(a) 窗口参数是5,1,3,1maxminmaxminwywywxwx。视区参数是

1,0,1,0maxminmaxminvyvyvxvx。那么41,21yxss且





1004141021021N

(b) 窗口参数同(a)。视区参数是21,0,21,0minmaxmaxminwyvyvxvx。那么81,41yxss且





1008181041041N

2. 设R是左下角L(-3,1),右上角为R(2,6)的矩形窗口。请写出图中的线段端点的区域编码。【图5.6 P90】 解答: 点(x,y)的区域编码根据下面的模式设置。 比特1=sign(y-ymax)=sign(y-6) 比特3=sign(x-xmax)=sign(x-2) 比特2=sign(ymin-y)=sign(1-y) 比特4=sign(xmin-x)=sign(-3-x) 此处:

)0(,0)0(,1)(aa

asign

因此: A(-4,2)→0001 B(-1,7)→1000 C(-1,5)→0000 D(3,8)→1010 计算机图形学 5 E(-2,3)→0000 F(1,2)→0000 G(1,2)→0100 H(3,3)→0010 I(-4,7)→1001 J(-2,0)→1000

3. 求垂直线x和水平线y与21PP四边形平行坐标轴的矩形裁剪窗口的交点。写出线段(从),(111yxP到),(222yxP)与(a)垂直线x=a,(b)水平线y=b的交点。 解答: 线段的参数方程是:

)()(121121yytyyxxtxx

10t

(b) 因为ax,将它代入方程)()(121xxxat得到。然后把此值再代入方程,则交点是axI和 121211yyxxxayyI

(c) 因为by,将它代入方程)()(121yyybt得到。然后把此值再代入方程,则交点是byI和 121211xxyyyaxxI

4. 如何判断一个点P(x,y)是在由A(x1,y1)和B(x2,y2)所连接的线段的左边还是右边。 解答: 参见图所示。对于向量AB和AP,如果P点在AB的左边,根据两个向量叉乘的

Xmin=-3 Xmax=2 ymax=6 ymin=1 A(-4,2) F(1,2) E(-2,3) G(1,-2) H(3,3) C(-1,5) D(3,8) I(-4,2) J(-2,10) B(-1,7) x y