Chinaunix首页 | 论坛 | 博客
  • 博客访问: 174346
  • 博文数量: 43
  • 博客积分: 827
  • 博客等级: 准尉
  • 技术积分: 487
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-26 19:19
文章分类

全部博文(43)

文章存档

2015年(1)

2014年(1)

2013年(5)

2012年(36)

我的朋友

分类: WINDOWS

2012-03-09 21:16:41

在前面的"不同基下的坐标变换"对于不同坐标系的变换不是一般的描述形式,在这里更进一步考虑了坐标系之间的关系,和描述形式。

一个坐标空间并不是只有基向量来刻画,还需要一个基点来描述这个坐标空间的位置。
也就是
{, (x0, y0, z0)},这里为基向量,(x0,y0,z0)为基点。

在一个空间里面,定义一个最基本的坐标系。然后在这个空间里面定义两个不同的坐标系:
如图所示:

在上面的图中:Base Coordinate为定义这个空间的基本坐标系,Coordinate0和Coordinate1为衍生出的两个坐标系。

对于基向量:
*T = 这里T为基向量间的变换矩阵
对于基点
p0+Offset = p1  


现在在这个空间中取定一点p
他在Coordinate0中的坐标为(x0,y0,z0)
他在Coordinate1中的坐标为(x1,y1,z1)

那么从上面的图中可以得到关系式
*[x0]+p0 = *[x1]+p1
           [y0]                 [y1]
           [z0]                 [z1]

这里面:
*[x0]表示当Coordinate0和Base Coordinate基点重合的时候,在Coordinate0中p点在Base Coordinate
           [y0]
           [z0]

中的坐标,所以加上偏移过后就是在Coordinate0中点p在Base Coordinate中的坐标形式。

这里记在Coordinate0中坐标为C0,在Coordinate1中坐标为C1,p0-p1 = (px,py,pz) = Poff

*C0+Poff = *C1

而对于Poff相当于对*C0的一个Translation变换,那么可以写成矩阵形式

记|, 0| = A0                         | , 0| = A1, 
  |  0, 0, 0 , 1|                              |  0, 0, 0  , 1| 

Translation Matrix = Tr = | 1, 0, 0, px |
                          | 0, 1, 0, py |
                          | 0, 0, 1, pz |
                          | 0, 0, 0, 1  |

则有
Tr*A0*C0 = A0*T*C1

Inv(A0) * Tr * A0 * C0 = T * C1
|Inv(), 0| * | , Poff | * C0 = T * C1 
|   0,  0,  0,      1|   |  0,   0,  0,   1   |
而:
|Inv(), 0| * | , Poff |  = |          E3x3,  Inv()*Poff|
|   0,  0,  0,      1|   |  0,   0,  0,   1   |    |  0,    0,  0 ,           1          |

最后得到
   
Inv(T) * |          E3x3,  Inv()*Poff| * C0 = C1
         |  0,    0,  0 ,           1          |

这和在没有偏移的情况下多了中间这个矩阵,中间这个矩阵就是偏移矩阵。
这里也说明了在不同坐标系情况下是先考虑
1:偏移(将两个基向量放到同一个基点考虑)
2:再是基向量的变换矩阵

对于        |          E3x3,  Inv()*Poff| 矩阵的说明 :
            |  0,    0,  0 ,           1          |

Inv()*Poff实际上是将Base Coordinate中的Poff转换得到在Coordinate0中的表达形式,因为C0是在Coordinate0中的坐标,而偏移向量p0-p1是在Base Coordinate中,所以先将p0-p1变换到Coordinate0中,这样C0就完成了偏移动作。



Inv(T) * |          E3x3,  Inv()*Poff| * C0 = C1 这个等式是一般情况下的表达式,通常情况下
         |  0,    0,  0 ,           1          |

Coordinate0就是Base Coordinate,这样Inv()是E,所以就直接在C0上施加p0-p1。


补充:
考虑向量的情况
 |          E3x3,  Inv()*Poff|*C0 = T*C1
 |  0,    0,  0 ,           1          |

对于这个表达式,如果C0和C1是向量,即第四维为0,则 |          E3x3,  Inv()*Poff|该矩阵不起作
                                              |  0,    0,  0 ,           1          |

用,则表达式退化为:C0 = T*C1 
这也就是说前面的p0和p1没有作用,这个时候两个坐标系是同基点的。
在考虑向量的情况下的模型:

这个时候任意的坐标系都是同基点的。因为是同基点,那么这里面的不同基中的向量是同构的。

2013-11-02 :
*[x0]+p0 = *[x1]+p1
           [y0]                 [y1]
           [z0]                 [z1]
即:
*(x0, y0, z0, p0)^t = *(x1, y1, z1, p1)^t



阅读(2988) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~