码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵与坐标系

时间:2015-08-07 00:14:44      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

   在OSG里用4*4矩阵表示坐标系,空间坐标系有三个轴X,Y,Z,那么表示坐标系的矩阵中各个数字的具体意义,以及怎样建立局部坐标系就是本文所要说明的。

矩阵意义

  矩阵的前三列表示局部坐标系的各个轴的方向,最后一行表示世界坐标系下原点在局部坐标系下的坐标。

 

              X轴  Y轴  Z轴

              a00     a01     a02     a03

              a10     a11     a12     a13

              a20     a21     a22     a23

    世界原点所在位置       a30     a31     a32     a33

 

  矩阵的最后一列一般是0 0 0 1,也就是说最终的矩阵只需要确定前三列的值就可以了:

              X轴  Y轴  Z轴

              a00     a01     a02     0

              a10     a11     a12     0

              a20     a21     a22     0

    世界原点所在位置       a30     a31     a32     1

 

构建矩阵

 技术分享

  如上图所示,x,y,z是世界坐标系,A(1,0,0)、B(0,1,0)、C(0,0,1)三点确定了一个平面,OO’是平面的法线。

  现在按以下要求建立坐标系:

      以O’为局部坐标系原点

      O’Z’为Z轴

      X轴可以选择平面上任意一条过O’的直线,如O’C

      Y轴就是z’^x‘      (^表示向量叉乘)

 

  按照以上要求,可通过以下步骤来构建表示此局部坐标系的矩阵。

1、确定轴方向

  由ABC三点可求得O’的坐标为(1/3,1/3,1/3)。进一步求得三个轴的方向向量为:

    x’(-1/3,-1/3,2/3)

    y’(1/3,-1/3,0)

    z’(1/3,1/3,1/3)

 

  因此建立局部坐标系如下:

    x轴       y轴        z轴

    -1/3     1/3       1/3      0

    -1/3     -1/3      1/3     0

    2/3       0          1/3     0

    0          0          0        1          原点所在位置

 

2、确定原点坐标

  还需要确定世界坐标系原点在此坐标系下的坐标,由图上可知,原点在z’轴的负方向,OO’的长度为√3/3,所以原点在局部坐标系的坐标为(0,0,- √3/3)

  局部坐标系如下:

    x轴       y轴        z轴

    -1/3      1/3        1/3        0

    -1/3     -1/3        1/3       0

    2/3       0           1/3        0

    0          0          -√3/3  1          原点所在位置

 

3、单位化

  必须保证坐标系各个轴是单位向量,因此需要对每个轴单位化,最终的矩阵M如下:

    x轴          y轴          z轴

       -√6/6  √2/2   √3/3        0

       -√6/6  -√2/2  √3/3       0

       √6/3         0          √3/3       0

       0              0          -√3/3      1          原点所在位置

 

4、补充说明

  必须要注意一点,M是一个WorldToLocal的矩阵,也就是说它是将世界坐标换算到局部坐标的矩阵。

  三维坐标在与矩阵相乘的时候,需要补充一个值,构成四维才能运算,补充的值就是1。可以验证一下:

  C点在世界坐标系下是(0,0,1),在局部坐标系下就是(|O’C|,0,0),其中C的长度是√6/3。

               (0,0,1,1) * M = (√6/3,0,0)。

 

直接计算LocalToWorld矩阵

  如果已经明确局部坐标系的X、Y、Z轴方向和原点位置,那么可以直接计算出局部坐标系。

  此矩阵前三行表示局部坐标系的各个轴的方向,第四行表示的是局部坐标系的原点在世界坐标系中的位置。

 

      X轴        a00     a01     a02     0

      Y轴        a10     a11     a12     0

      Z轴        a20     a21     a22     0

    局部原点所在位置     a30     a31     a32     1

 

  继续用以上的例子来说明,X、Y、Z现已经明确,O’就是局部坐标系的原点,因此第四行就是O’坐标:

 

                    X轴                    -√6/6       -√6/6      √6/3      0

                    Y轴                     √2/2        √2/2         0         0

                    Z轴                     √3/3        √3/3       √3/3      0

           局部原点所在位置        1/3          1/3         1/3       1

 

  可以验证一下,C点坐标在局部坐标系下是(√6/3,0,0),补1构成四维,乘以这个矩阵:

                                                        (√6/3,0,0,1) * M = (0,0,1,1)

  C点的世界坐标正是(0,0,1)。

 

  直接计算LocalToWorld矩阵要比计算WorldToLocal矩阵更简便一些,省去了确定原点的步骤,因此可用这种方法来快速建立局部坐标系。

 

  特别需要说明的是,以上所说的矩阵都是在OSG的表示方式,OpenGL中的矩阵与OSG中的矩阵是转置关系。

 

矩阵与坐标系

标签:

原文地址:http://www.cnblogs.com/kingloongwl/p/4709416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!