三维几何变换包括平移、旋转和变比。三维几何变换可以表示为公式,或三维齐次坐标和
     
     
      
       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
     
     
      相乘,从而实现三维几何变换。
     
    
   
 
