计算机图形学+机械工业出版社+徐长青+答案
- 格式:doc
- 大小:391.00 KB
- 文档页数:18
计算机图形学作业答案
第一章序论
第二章图形系统
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 =(y
2-y
1
)/(x
2
-x
1
)=(18-0)/(6-0) = 3
接着b在y轴的截距可以代入方程y=3x+b求出 0=3(0)+b。因此b=0,所以直线方程为y=3x。
2.使用斜截式方程画斜率介于0°和45°之间的直线的步骤是什么?
解答:
(1)计算dx:dx=x
2-x
1
。
(2)计算dy:dy=y
2-y
1
。
(3)计算m:m=dy/dx。
(4)计算b: b=y
1-m×x
1
(5)设置左下方的端点坐标为(x,y),同时将x
end
设为x的最大值。如果
dx < 0,则x=x
2、y=y
2
和x
end
=x
1
。如果dx > 0,那么x=x
1
、y=y
1
和x
end =x
2
。
(6)测试整条线是否已经画完,如果x > x
end
就停止。
(7)在当前的(x,y)坐标画一个点。
(8)增加x:x=x+1。
(9)根据方程y=mx+b计算下一个y值。
(10)转到步骤(6)。
3.请用伪代码程序描述使用斜截式方程画一条斜率介于45°和-45°(即|m|>1)之间的直线所需的步骤。
假设线段的两个端点为(x1,y1)和(x2,y2),且y1 int x = x1, y = y1; float x f, m = (y2-y1)/(x2-x1), b = y1-mx1; setPixel( x, y );/*画一个像素点*/ while( y < y2 ) { y++; x f = ( y-b)/m; x = Floor( x f +0.5 ); setPixel( x, y ); } 4.请用伪代码程序描述使用DDA算法扫描转换一条斜率介于-45°和45°(即|m| ≤1)之间的直线所需的步骤。 解答: 假设线段的两个端点(x1, y1)和(x2,y2),且x1 int x = x1, y; float y f = y1, m = ( y2– y1) / ( x2-x1); while( x < = x2 ) { y = Floor( y f + 0.5 ); setPixel( x, y ); x++; y f = y f + m; } 5.使用Bresenham算法画斜率介于0°和45°之间的直线所需的步骤。 解答: (1)计算初始值: dx =x2-x1In c2 =2(dy-dx) dy =y2-y1 d =In c1-dx In c1 =2dy (2)设置左下方的端点坐标为(x,y),同时将x end设为x的最大值。如果dx < 0,则x=x2,y=y2和x end=x1。如果dx > 0, 那么x=x1、y=y1 和x end=x2。 (3)在当前的(x,y)坐标画一个点。 (4)判断整条线段是否已经画完,如果x=x end就停止。 (5)计算下一像素的位置。如果d<0,那么d=d+In c1。如果d≥0,那么d=d + In c2,并且y=y+1。 (6)增加x:x=x+1。 (7)在当前的(x,y)坐标画一个点。 (8)转到步骤(4)。 6.请指出用Bresenham算法扫描转换从像素点(1,1)到(8,5)的线段时的像素位置。 首先必须找到初始值。在这个例子中, dx = x 2-x 1 = 8-1 = 7 dy = y 2-y 1 = 5-1 = 4 因此, In c 1= 2dy = 2×4 = 8 In c 1=2(dy -dx )= 2×(4-7)=-6 d =In c 1-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. 给定数据点P 0(0,0),P 1(1,2)P 2(2,1)P 3(3,-1)P 4(4,10)P 5(5,5),用三次B 样条插值法插值这些数据点,求出曲线,并找出定义三次B 样条的节点集t 0,……,t 9。 解答: m =3, n =5,选择节点集可以有两种方案: (1) 选择: )(103210x t t t t <-====, )(69876n x t t t t >==== 其余的节点按以下方式选择: 1,......,0,...11--=++= ++++m n i m x x t m i i m i 故: 23 3 21=++= t , 33 4 32=++= t (2) 三次样条的另一种方案是: 13210-====t t t t , 69876====t t t t 其余节点按以下方式选择: 24++=i i x t ,I =0,……,n-4 故: t 4=2, t 5=3