三维图形几何变换

  • Post author:
  • Post category:其他




三维几何变换包括平移、旋转和变比。三维几何变换可以表示为公式,或三维齐次坐标和



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))













文本框: 绕x轴旋转 图3.5(b)
文本框: 绕z轴旋转 图3.5(a)










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


相乘,从而实现三维几何变换。