3.1.2 三维图形几何变换
三维几何变换包括平移、旋转和变比。三维几何变换可以表示为公式,或三维齐次坐标和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两点所定义的矢量。旋转角度为 (图
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(x1,y 1,z 1) 作1的逆变换。
图3.6 绕任意轴P1P2旋转的前四个步骤
1 求R x (α) 的参数:转角α是u 在yoz 平面的投影u ′=(o ,b,c) 与z 轴的夹角(图3 7(a)),故有:
cos =,其中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 1p 2现在的单位矢量u ″的z 方向分量之值即为u ′之长度,等于d, β是u ″与u z 之夹角,故有: cosβ=
=d
根据矢量积的定义,有:
uz |u ″||u z |sin β=u y ·(-a )
因为|u ″|=
sinβ=-a =
=1,并|u z |=1,所以:
因此得到R y (β) 为:
Ry(β) =
绕任意轴(x1 y1 z1)(x2 y2 z2) 转动θ角的变换R(θ) 为如下级联变换:
R(θ) =T(-x 1, -y 1, -z 1) ·R x (a)·R y (β) ·R z (θ) ·
Ry (-β)·R x (-a) ·T(x1,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(xf ,y f ,z f ,s x ,s y ,s z ,x r1,y r1,z r1,x r2,y r2,z r2, α,t x , ty , tz , matrix);
其中:x f ,y f ,z f 是变比固定坐标;
sx ,s y ,s z 是变比参数;
xr1,y r1,z r1,x r2,y r2,z r2 是旋转所绕任意轴的起点与终点坐标;
α 是平移参数;
matrix 是返回的4×4的变换矩阵。
2 积累变换的指令
accumulate-matrices-3(m1,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 相乘,从而实现三维几何变换。
3.1.2 三维图形几何变换
三维几何变换包括平移、旋转和变比。三维几何变换可以表示为公式,或三维齐次坐标和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两点所定义的矢量。旋转角度为 (图
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(x1,y 1,z 1) 作1的逆变换。
图3.6 绕任意轴P1P2旋转的前四个步骤
1 求R x (α) 的参数:转角α是u 在yoz 平面的投影u ′=(o ,b,c) 与z 轴的夹角(图3 7(a)),故有:
cos =,其中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 1p 2现在的单位矢量u ″的z 方向分量之值即为u ′之长度,等于d, β是u ″与u z 之夹角,故有: cosβ=
=d
根据矢量积的定义,有:
uz |u ″||u z |sin β=u y ·(-a )
因为|u ″|=
sinβ=-a =
=1,并|u z |=1,所以:
因此得到R y (β) 为:
Ry(β) =
绕任意轴(x1 y1 z1)(x2 y2 z2) 转动θ角的变换R(θ) 为如下级联变换:
R(θ) =T(-x 1, -y 1, -z 1) ·R x (a)·R y (β) ·R z (θ) ·
Ry (-β)·R x (-a) ·T(x1,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(xf ,y f ,z f ,s x ,s y ,s z ,x r1,y r1,z r1,x r2,y r2,z r2, α,t x , ty , tz , matrix);
其中:x f ,y f ,z f 是变比固定坐标;
sx ,s y ,s z 是变比参数;
xr1,y r1,z r1,x r2,y r2,z r2 是旋转所绕任意轴的起点与终点坐标;
α 是平移参数;
matrix 是返回的4×4的变换矩阵。
2 积累变换的指令
accumulate-matrices-3(m1,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 相乘,从而实现三维几何变换。