三维几何变换包括平移、旋转和变比。三维几何变换可以表示为公式,或三维齐次坐标和
4
×
4
变换矩阵的乘积。下面分别以公式,矩阵乘积和简记符号来描述三维几何变换。并记变换前物体的坐标为
x,y,z
;变换后物体的坐标为
x
′,
y
′,
z
′。
一、平移
设
Tx,Ty,Tz
是物体在三个坐标方向上的移动量,则有公式:
x
′=
x
+
T
x
y
′=
y
+
T
y
z
′=
z
+
T
z
矩阵运算表达为:
[
x
′
y
′
z
′
1
]=[
x
y
z
1
]
简记为:
T(Tx,Ty,Tz)
二、旋转
旋转分为三种基本旋转:绕
z
轴旋转,绕
x
轴旋转,绕
y
轴旋转。在下述旋转变换公式中,设旋转的参考点在所绕的轴上,绕轴转θ角,方向是从轴所指处往原点看的逆时针方向
(
图
3.5(a),(b))
。
1
绕
z
轴旋转的公式为:
x
′=
xcos
θ-
ysin
θ
y
′=
xsin
θ+
ycos
θ
z
′=
z
矩阵运算的表达为:
[
x
′
y
′
z
1
]=[
x
y
z
1
]
简记为
R
z
(
θ
)
。
2
绕
x
轴旋转的公式为:
x
′=
x
y
′=
ycos
θ-
zsin
θ
z
′=
ysin
θ+
zcos
θ
矩阵运算的表达为:
[
x
′
y
′
z
′
1
]=[
x
y
z
1
]
简记为
R
x
(
θ
)
2
绕
y
轴旋转的公式为:
x
′=
zsin
θ+
xcos
θ
y
′=
y
z
′=
zcos
θ-
xsin
θ
矩阵的运算表达式为:
[
x
′
y
′
z
′
1
]=[
x
y
z
1
]
简记为
Ry(
θ
)
。
如果旋转所绕的轴不是坐标轴,而是一根任意轴,则变换过程变显得较复杂。首先,对物体作平移和绕轴旋转变换,使得所绕之轴与某一根标准坐标轴重合。然后,绕该标准坐标轴作所需角度的旋转。最后,通过逆变换使所绕之轴恢复到原来位置。这个过程须由
7
个基本变换的级联才能完成。
设旋转所绕的任意轴为
p
1
, p
2
两点所定义的矢量。旋转角度为
q
(
图
3.6)
。这
7
个基本变换是:
1
T(
-
x
1
,
-
y
1
,
-
z
1
)
使
p
1
点与原点重合
(
图
3.6(b))
;
2
R
x
(
α
)
,使得轴
p1p2
落入平面
xoz
内
(
图
3.6(c))
;
3
R
y
(
β
)
,使
p1p2
与
z
轴重合
(
图
3.6(d));
4
R
z
(
θ
)
,执行绕
p1p2
轴的θ角度旋转
(
图
3.6(e))
;
5
R
y
(
-β
)
,作
3
的逆变换;
6
R
x
(
-α
)
,作
2
的逆变换;
7
T(x
1
,y
1
,z
1
)
作
1
的逆变换。
图3.6 绕任意轴P1P2旋转的前四个步骤
1
求
R
x
(
α
)
的参数:转角α是
u
在
yoz
平面的投影
u
′=(
o
,
b,c)
与
z
轴的夹角
(
图
3
7(a))
,故有:
cos
a
=,其中
d
=
又因
u
′×
u
z
=
u
x
|
u
′||
u
z
|
sin
α
其中
u
x
是在
x
轴上的投影。并且用行列式计算矢量积得:
u
′×
u
z
=
u
x
·
b
,故得:
sin
α=
,得出
R
x
(
α
)
为:
R
x
(
α
)=
图3.7
2
求
R
y
(
β
)
的参数
(
图
3.7(b))
:经过
R
x
(
α
)
变换,
p
2
已落入
xoz
平面,但
p
2
点与
x
轴的距离保持不变。因此,
p
1
p
2
现在的单位矢量
u
″的
z
方向分量之值即为
u
′之长度,等于
d,
β是
u
″与
u
z
之夹角,故有:
cos
β
=
=
d
根据矢量积的定义,有:
u
z
|
u
″||
u
z
|
sin
β=
u
y
·
(
-
a
)
因为|
u
″|=
=
=1,并|
u
z
|=1,所以:
sin
β=-
a
因此得到
R
y
(β
)
为:
Ry
(β
)
=
绕任意轴
(x
1
y
1
z
1
)(x
2
y
2
z
2
)
转动θ角的变换
R(
θ
)
为如下级联变换:
R(
θ
)
=T(-
x
1
,
-
y
1
,
-
z
1
)
·
R
x
(a)
·
R
y
(
β
)
·
R
z
(
θ
)
·
R
y
(-β)·
R
x
(
-
a)
·
T(x
1
,y
1
,z
1
)
三、变比
设
sx,sy,sz
是物体在三个方向的比例变化量,则有公式:
x
′=
x
·
sx
,
y
′=
y
·
sy
,
z
′=
z
·
sz
,
矩阵运算的表达为
[
x
′
y
′
z
′
1
]=[
x
y
z
]
简记为
S(sx,sy,sz)
。
相对于某个非原点参数点
(xf,yf,zf)
进行固定点变比变换,是通过如下级联变换实现的:
T(
-
xf,
-
yf,
-
zf)
·
S(sx,sy,sz)
·
T(xf,yf,zf)
四、三维几何变换的指令
和二维类似,三维几何变换也有三条指令,分别执行建立变换矩阵,积累变换和坐标变换的功能。
1
建立变换矩阵的指令:
creat-transformation-matrix-3(x
f
,y
f
,z
f
,s
x
,s
y
,s
z
,x
r1
,y
r1
,z
r1
,x
r2
,y
r2
,z
r2
,
α
,t
x
, t
y
, t
z
, matrix);
其中:
x
f
,y
f
,z
f
是变比固定坐标;
s
x
,s
y
,s
z
是变比参数;
x
r1
,y
r1
,z
r1
,x
r2
,y
r2
,z
r2
是旋转所绕任意轴的起点与终点坐标;
α
是平移参数;
matrix
是返回的
4
×
4
的变换矩阵。
2
积累变换的指令
accumulate-matrices-3(m
1
,m
2
,m);
其中
m
1
,m
2
是输入矩阵,
m
是输出矩阵。三个都是
4
×
4
的矩阵。这条指令执行如下功能:
m
=
m
1
·
m
2
3
坐标变换的指令:
set-segment-transformation-3(Id,matrix);
其中
Id
是物体的编号,
matrix
是变换矩阵。这条指令将
Id
所含的坐标逐一与
matrix
相乘,从而实现三维几何变换。