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

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

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机图形学作业答案

第一章序论

第二章图形系统

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