计算机图形学习题课

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

6、如下图所示多边形,若采用扫描转换算法(ET边表算法)进行填充, 试写出该多边形的ET表和当扫描线Y=2时的有效边表AET表(活性边表), 并说明在该处的填充区间。
y
12
p1
11
10
9
p0
p6
8
7
p2
6 5
p4
4
3
2
1
p3
p5
1 2 3 4 5 6 7 8 9 10 11 12 x
解:
边表的纵向链表长度为多边形所占有的最大扫描线数12;
y
p3 = y1-y2 =4>0
q3 = y1 – wyb=3
p4 = y2-y1 =-4<0
q4 = wyt – y1=-1
直线段与窗口边界的交点计算如下:
uk·pk=qk k=1,2,3,4
U1=0.6, U2=0.2, U1=0.0.75, U1=0. 25
窗口
由于有:
J(0,0.6)
p1 、p3大于0, p2、 p4小于0 Uone=max(0,uk|pk<0,uk|pk<0) Utwo=min(1,uk|pk>0,uk|pk>0) 因此:
解:Δx=x2-x1=8-0=8
Δy=y2-y1=5-0=5
直线斜率k= Δy / Δyx = 5/8,
满足0≤k≤1,
所以每次x增加1,求y的值。
d的初始值为Δx-2Δy=8-2*5=-2 往右上方的增量为2Δx-2Δy=6 往正右方的增量为-2Δy=-10 初始点为(0,0)
由于d<0时,y向上走 一步;
P2(-2,-1)
Uone=max(0,u2,u4)=max(0,0.2,0.25)=0.25 Utwo=min(1, u1,u3)=min(1,0.6,0.75)=0.6
可见Uone< Utwo ,它们分别对应输出直线段的起点和终点 由于有:x=3-5u
y=3-4u
因此:
Uone对应的交点为(1.75,2), Utwo对应的交点为(0,0.6) 裁剪后输出线段的端点即为I(1.75,2)和 J(0,0.6)。
00
0 =0
10 -1 0.5
C(0,2,0) y
B(2,2,0) A(2,0,0) x
1 1 -1 0.5 A’
1 3 -1 0.5 B’ -1 3 -1 0.5 C’
1 3 1 0.5 D’
四面体ABCD各顶点变换后的齐次坐标为: A(1,1,-1,0.5),B(1,3,-1,0.5),C(-1,3,-1,0.5),D(1,3,1,0.5)
共有7条边,每条边的数据形成一个结点,链入与该边最小y坐 标相对应的桶处。
由此,可写出该多边形的ET表,如下图所示:
y
12
p1
11
10
9
p0
p6
8
7
p2
6 5
p4
4
3
2
1
p3
p5
1 2 3 4 5 6 7 8 9 10 11 12 x
1 0 00 T2= 0 1 0 0
0 0 10
0 0 0 0.5
1 0 00 T3= 0 1 0 0
0 0 10
2 -2 2 1
1 0 00 1 0 00
1 0 00
T= T1· T2· T3=00
1 0
00 10
·00
1 0
00 10
·00
1 0
00 10
-2 2 -2 1 0 0 0 0.5 2 -2 2 1
更新为d-1;否则(x,y)更新为(x,y+1)。
5.当直线没有画完时,重复步骤3和4。否则结束。
影响此算法效率的主要原因是存在浮点数及浮点数与0.5的大小比较,为消除 这些不利因素的影响,可进行如下优化:
影响此算法效率的主要原因是存在浮点数及浮点数与0.5的大小比较,为消除 这些不利因素的影响,可进行如下优化:
y
解:
直线段AB的参数方程为:
A(3,3)
x=3+u·(-2-3) y=3+u·(-1-3)
0≤u≤1
窗口
B(-2,-1)
p1 = x1-x2=5>0
因此:pp32
=
=
x2-x1 =-5<0
y1-y2 =4>0
p4 = y2-y1 =-4<0 可见P均不为0
即:
x=3-5u (0 ≤ u ≤ 1) y=3-4u
= -s·sinθ s·cosθ 0
0
01
如果先作旋转变换再作比例变换,复合变换的变换矩阵为T2 :
cosθ sinθ 0
T2=Tr·Ts = -sinθ cosθ 0
00 1
S0
·0 S
00
0 s·cosθ s·sinθ 0
0 = -s·sinθ s·cosθ 0
1
0
01
T1 =T2 ,因此可证明一个均匀比例(Sx=Sy)和一个旋转变换是 一个可交换对。
最终得到了一个整数的算法。
优化后的算法步骤:
1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、e=-△y、x=x0、y=y0。
3.绘制点(x,y)。
4.e 更 新 为 e+2△x , 判 断 e 的 符 号 。 若 e>0 , 则 (x,y) 更 新 为 (x+1,y+1) , 同 时 将 e 更 新 为 e-2△y ; 否 则 (x,y) 更 新 为 (x,y+1)。
u·pk≤qk k=1,2,3,4
❖ 取“=”时求得的u对应的是直线与窗口边界的交点
❖ 1、2、3、4分别对应左、右、下、上边界
裁剪后的两端点是哪些点?
❖ U=0和1时分别对应直线的起点和中点
分析:裁剪的本质
假定PK不为0
I1
左p1 = x1-x2
右p2 = x2-x1
下p3 = y1-y2
上p4 = y2-y1
1 0 00
= 0 1 00
0 0 10 -1 1 -1 0.5
P(2,-2,2)
z D(2,2,2)
四面体ABCD的齐次坐标表示矩阵为:
2 0 01 A
P=
2 0
2 01 2 01
B C
2 2 21 D
2 0 01
P’=P·T= 2 2 0 1·
0 2 01 2 2 21
10 01 00 -1 1
如果Uone≤ Utwo取可求得两端点
如果Uone> Utwo表明什么?
左p1 = x1-x2
右p2 = x2-x1 下p3 = y1-y2 上p4 = y2-y1
q1 = x1 – wxl q2 = wxr – x1 q3 = y1 – wyb q4 = wyt – y1
J1
I1
Uone=max(0,uk|pk<0,uk|pk<0) Utwo=min(1,uk|pk>0,uk|pk>0)
C
wyt
G
wyt
F
来自百度文库
H
I
B A
wxl
D
wyb
E wxr
J
K
L wxl
wyb wxr
(a)直线段与窗口边界
(b)直线段与窗口边界
wxl和wxr平行的情况
wyb和wyt平行的情况
p1=p2=0
Uone=max(0,uk|pk<0)
Utwo=min(1,uk|pk>0)
p3=p4=0
1、试用liang-barsky算法裁剪图中的线段AB。
Computer Graphics
3. Liang-Barsky算法
分析:P1(x1,y1)和P2(x2,y2)


p1

p1

p1
p2
将线段看成由方向性:外到内 内到外
Liang-Barsky算法
任意直线段I(X1,Y1)J(X2,Y2)的参数方程:
x=x1+u·(x2-x1) y=y1+u·(y2-y1)
5.当直线没有画完时,重复步骤3和4。否则结束。
4、求将图中的空间四面体进行如下变换的变换矩阵,写出复 合变换后图形各顶点的规范化齐次坐标,并画出符合变换后的 图形。 (1)关于点P整体放大2倍;
(2)关于y轴进行对称变换。
P(2,-2,2)
z D(2,2,2)
C(0,2,0) y
B(2,2,0) A(2,0,0)
优化1:令e = d - 0.5
yi+1 = yi + 1
xi+1 =
xi + 1 xi
e>0 e≤0
• e初=-0.5,
• 每走一步有e=e+m。
• if (e>0) then e=e-1
改进2:用2e△y来替换e
e初=-△y,
每走一步有e=e+2△x。 if (e>0) then e=e-2△y
q2 = wxr – x1
q3 = y1 – wyb q4 = wyt – y1
wyt
窗口
wyb
o
wxl
wxr x
u·(x1-x2) ≤ x1 – wxl 左边界 u·(x2-x1) ≤ wxr – x1 右边界 u·(y1-y2) ≤ y1 – wyb 下边界 u·(y2-y1) ≤ wyt – y1 上边界
0≤u≤1
给定裁剪窗口:
y wyt
wyb o
窗口
wxl
wxr x
y
Liang-Barsky算法
如果任一点()在窗口内则:
wxl≤ x1+u·(x2-x1) ≤ wxr
wyb≤y1+u·(y2-y1) ≤ wyt
p1 = x1-x2
p2 = x2-x1
令:p3 = y1-y2
p4 = y2-y1
q1 = x1 – wxl
P1(3,3) I(1.75,2)
x
2、试用中点Bresenham算法扫描转换一条连接两点(0,0)和(8,5) 的直线段。
y
如果两点变为(0,0)和(5,8)的 直线段,可以怎样做?
o
x
2、试用中点Bresenham算法扫描转换一条连接两点(0,0)和(8,5)的直线段。
y
5 4 3 2 1
o 12 3 4 5 6 78 x
x
z D(2,2,2)
解:
P(2,-2,2)
(1)分为3次基本变换:平移、整体放大、反向平移
①平移:Tx=-2,Ty=2,Tz=-2
C(0,2,0) y
T1=
1 0
0 1
00 00
0 0 10
-2 2 -2 1
B(2,2,0) A(2,0,0)
x
②整体放大:S=1/2
③反向平移:Tx=2,Ty=-2,Tz=2
规范化的齐次坐标为:
A(2,2,-2,1),B(2,6,-2,1),C(-2,6,-2,1),D(2,6,2,1)
变换后各点的坐标为:
A(2,2,-2),B(2,6,-2),C(-2,6,-2),D(2,6,2)
变换后各点的坐标为:
A(2,2,-2),B(2,6,-2),C(-2,6,-2),D(2,6,2)
q1 = x1 – wxl
q2 = wxr – x1
q3 = y1 – wyb
q4 = wyt – y1
J1
Uone=max(0,uk|pk<0,uk|pk<0) Utwo=min(1,uk|pk>0,uk|pk>0)
对于I1J1
P1、P4小于0 U在0、U1、U4取大者 P2、P3大于0 U在1、U2、U3取小者
Ts =
S0 0
0S 0
00 1
旋转变换的变换矩阵为:
Tr =
cosθ sinθ 0
-sinθ cosθ 0
00 1
如果先作比例变换再作旋转变换,复合变换的变换矩阵为T1 :
S0
T1=Ts·Tr = 0 S
00
0 cosθ sinθ 0
0 ·-sinθ cosθ 0
1
00 1
s·cosθ s·sinθ 0
P1、P3小于0 U在0、U1、U3取大者 P2、P4大于0 U在1、U2、U4取小者
特殊处理:PK为0
左p1 = x1-x2 右p2 = x2-x1 下p3 = y1-y2
上p4 = y2-y1
q1 = x1 – wxl
q2 = wxr – x1 q3 = y1 – wyb q4 = wyt – y1
图形如下(b)所示:
P(2,-2,2)
z
z
D(2,2,2)
P(2,-2,2)
C(0,2,0) y
B(2,2,0) A(2,0,0) x
(a)
x
A(2,2,-2)
(b)
D(2,6,2)
C(-2,6,-2)
y B(2,6,-2)
5、试证明一个均匀比例(Sx=Sy)和一个旋转变换是一个可交换对。
证明:即需要证明这两个变换的变换矩阵的乘积满足交换率。 均匀比例变换的变换矩阵为:
xi+1 =
xi + 1
xi
d>0.5
d≤0.5
m d
d的初值为0;
y每走一步,d增加m,m=1/k;
m
一旦x向前走了一步,将d减1。
由此可写出算法的基本步骤:
1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。 2.计算初始值△x、△y、d=0、x=x0、y=y0。
3.绘制点(x,y)。 4.d更新为d+m,判断d的符号。若d>0.5,则(x,y)更新为(x+1,y+1),同时将d
否则y不变
因此,扫描转换的过 程如右表所示:
3、试用改进的Bresenham算法画直线段的原理推导斜率为大1的直线 段的扫描转换算法,并对算法进行优化。
d dm dm
证明:k>1, Δx < Δy,y方向为最大位移方向 因此,y每次向上走一步,求x的值。
如果判别式为左图中所示的d,则有:
yi+1 = yi + 1
x
这里: wxl=0,wxr=2
wyb=0,wyt=2
q1 = x1 – wxl=3
q2 = wxr – x1=-1
q3 = y1 – wyb=3 q4 = wyt – y1=-1
p1 = x1-x2=5>0
q1 = x1 – wxl=3
p2 = x2-x1 =-5<0 q2 = wxr – x1=-1
相关文档
最新文档