计算机图形学 答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
计算机图形学
1, (a > 0) sign(a) = 0, (a ≤ 0)
因此: A(-4,2)→0001 B(-1,7)→1000 C(-1,5)→0000 D(3,8)→1010 E(-2,3)→0000 F(1,2)→0000 G(1,2)→0100 H(3,3)→0010 I(-4,7)→1001 J(-2,0)→1000
5
计算机图形学
(c) 因为 y = b ,将它代入方程 t = (b − y1 ) ( y 2 − y1 ) 得到。然后把此值再代入 方程,则交点是 y I = b 和
a − y1 x I = x1 + y −y ( x2 − x1 ) 1 2
4. 如何判断一个点 P(x,y)是在由 A(x1,y1)和 B(x2,y2)所连接的线段的左边还是 右边。 解答: 参见图所示。 对于向量 AB 和 AP,如果 P 点在 AB 的左边,根据两个向量叉乘的定 义,向量 AB×AP 的方向是向量 K,即 xy 平面的正交方向。 如果在右边,叉乘方向为- K,此时:
窗
口
参
数
vxmin = 0, vxmax =
1 1 1 1 , vymax = 0, wy min = 。那么 s x = , s y = 且 2 2 4 8
1 4 N =0 0 0 1 8 0 1 − 4 1 − 8 1
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) 此处:
计算机图形学
计算机图形学作业答案 第 1章 第 2章 序论 图形系统
1. 什么是图像的分辨率? 解答: 在水平和垂直方向上每单位长度(如英寸)所包含的像素点的数目。 2. 计算在 240 像素/英寸下 640×480 图像的大小。 解答:(640/240)×(480/240)或者(8/3)×2 英寸。 3. 计算有 512×512 像素的 2×2 英寸图像的分辨率。 解答: 512/2 或 256 像素/英寸。
J(-2,10) B(-1,7) I(-4,2)
y D(3,8) C(-1,5) E(-2,3) ymax=6 H(3,3) ymin=1 x Xmax=2
A(-4,2)
F(1,2)
Xmwenku.baidu.comn=-3
G(1,-2)
3. 求垂直线 x 和水平线 y 与 P 1P 2 四边形平行坐标轴的矩形裁剪窗口的 交点。写出 线段(从 P 1 ( x1 , y1 ) 到 P 2 ( x2 , y2 ) )与(a)垂直线 x=a,(b)水平线 y=b 的交点。 解答: 线段的参数方程是:
AB = ( x2 − x1 ) I + ( y2 − y1 ) J AP = ( x − x1 ) I + ( y − y1 ) J
AB×AP K A 因此:
P
B
AB × AP = [ ( x2 − x1 )( y − y1 ) − ( y2 − y1 )( x − x1 ) ] K
这个叉乘的方向由下式确定:
6
计算机图形学
, P =� � 设 P´ = � � 且
x'� � y '� �
x� � y� �
Rθ = �
cosθ � sin θ �
− sin θ � � sin θ �
则可得出 P ′ = Rθ • P 。 7. (a)写出对象绕原点旋转的旋转变换矩阵。( b)设点为 P(2,-4),旋转后的 新坐标是什么? 解答: (a) 根据上题:
第 4章
图形的裁剪及几何变换
1. 写出实现下述映射的规范化变换,将左下角在( 1,1),右上角在( 3,5)的窗 口映射到( a )规范化设备的全屏幕视区;( b )左下角在( 0 , 0 ),右上角在
1 1 , 的视区。 2 2
解答: (a) 窗口参数是 wxmin =1, wx max = 3, wy min =1, wy max = 5 。
t 0 = t1 = t 2 = t 3 = −1(< x0 ) , t 6 = t 7 = t 8 = t 9 = 6( > x n )
其余的节点按以下方式选择:
t i +m +1 =
故:
xi +1 + ... + xi +m , i = 0,......, n − m −1 m
t= 2 +3 +4 =3 3
C = ( x2 − x1 )( y − y1 ) − ( y2 − y1 )( x − x1 )
5. 如果 C 是正的,P 在 AB 的左边。如果 C 是负的,P 在 AB 的右边。 6. 根据一个对象点绕原点旋转的旋转变换,写出对应的矩阵表示。 解答 : 根据 sin 和 cos 的三角函数定义计算得到: x´=r cos(θ+Φ),y´=r sin(θ+Φ) 和 x =r cosΦ, y =r sinΦ 根据三角公式,得出: r cos(θ+Φ)= r (cosθcosΦ-sinθsinΦ)=x cosθ-y sinθ 和 r sin(θ+Φ)= r (sinθcosΦ+cosθsinΦ)=x sinθ-y cosθ 或 x´ = x cosθ-y sinθ, y´ = x sinθ+y cosθ
t 6 = t 7 = t8 = t 9 = 6
t=
1+ 2 +3 =2, 3
(2) 三次样条的另一种方案是:
t 0 = t1 = t 2 = t 3 = −1 ,
其余节点按以下方式选择:
t i +4 = xi +2 ,I=0,……,n-4
故:
3
计算机图形学
t4=2, t5=3 两种方法选择节点集,其根据是数据点沿 x 轴为等间距。
第 3章
二维图形生成技术
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) (2) (3) (4) (5) 计算 dx:dx=x2-x1。 计算 dy:dy=y2-y1。 计算 m:m=dy/dx。 计算 b: b=y1-m×x1 设置左下方的端点坐标为(x,y),同时将 xend 设为 x 的最大值。 如果 dx < 0,则 x=x2、 y=y2 和 xend=x1。 如果 dx > 0,那么 x=x1、 y=y1 和 xend=x2。 测试整条线是否已经画完,如果 x > xend 就停止。 在当前的(x,y)坐标画一个点。 增加 x:x=x+1。 根据方程 y=mx+b 计算下一个 y 值。 转到步骤(6)。
x = x1 + t ( x2 − x1 ) y = y1 + t ( y2 − y1)
(b) 因为 x 方程,则交点是 x I = a 和
0 ≤ t ≤1
= a ,将它代入方程 t = (a − x1 )
( x2 − x1 ) 得到。然后把此值再代入
a − x1 y I = y1 + x −x ( y 2 − y1 ) 1 2
(6) (7) (8) (9) (10)
3. 请用伪代码程序描述使用斜截式方程画一条斜率介于 45°和-45°(即|m|>1)之间 的直线所需的步骤。
1
计算机图形学
解答: 假设线段的两个端点为(x1,y1)和(x2,y2),且 y1<y2 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<x2 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)的线段时的像素 位置。
视 区 参 数 是 vxmin = 0, vxmax =1, vymin = 0, vymax =1 。 那 么
sx =
1 1 , sy = 且 2 4
1 2 N =0 0 0 1 4 0
同 (
1 − 2 1 − 4 1
a ) 。 视 区 参 数 是
(b)
2
计算机图形学
解答: 首先必须找到初始值。在这个例子中, 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) 选择: