2011-12-08 38 views
0

据我所知,Direct3D与LH坐标系一起工作的权利?如何从LH 4x4世界矩阵中获取位置和x/y/z轴?

那么我如何从LH 4x4(世界)矩阵中得到位置和x/y/z轴(局部方向轴)呢?

谢谢。

如果你不知道:LH表示左手

+0

LH代表什么? 4x4矩阵的最后一行看起来像(0,0,0,1)吗?如果是这样,它可能是SE(3)的一个元素,即特殊的Euclidian组。我绝对可以帮助你。 – vlsd

+0

@VladSeghete LH代表左撇子 – xcrypt

+0

噢,好的。我不认为左撇子和右撇子是一个问题,除非你试图在两种表示之间切换。只要所有的坐标系都是左撇子,我下面的建议就可以工作。如果你想让代码的某些部分由于任何原因而用右手代表东西,那么你需要确保你正确地在两个表示之间进行转换。 – vlsd

回答

1

如果4×4矩阵是什么,我认为这是(均质刚体变换矩阵,同SE的元素(3 )),那么它应该很容易得到你想要的。任何刚体变换都可以用矩阵符号表示的4×4矩阵表示为

g_ab = [ R, p; 
     0, 1] 

以块矩阵符号表示。 ab下标表示转换将采用框b中表示的点的坐标,并将告诉您坐标如何在帧a中表示。 R这里是一个3x3的旋转矩阵,p是一个矢量,当旋转矩阵为单位(无旋转)时,将告诉您012帧的b帧的原点坐标为a。但是,通常会出现轮换,因此您必须按照以下方式进行操作。

由矩阵描述的坐标系的位置将通过对点(0,0,0)应用变换给出。这就是你所处的世界坐标点。诀窍是,在处理SE(3)时,必须在点的末尾添加1,并在矢量的末尾添加0,这使得它们的长度为4而不是长度为3的矢量,因此可以通过矩阵!因此,要将本地坐标系中的点(0,0,0)转换为世界坐标系,您需要将矢量(0,0,0,1)乘以矩阵(我们称之为g_SA)。要获得矢量(x,y,z)的世界坐标,可以将矩阵乘以(x,y,z,0)。你可以认为这是因为向量是点的差异,所以最后一个元素中的1就离开了。因此,例如,要在世界坐标中查找本地x轴的表示形式,请乘以g_SA *(1,0,0,0)。要找到y轴,请执行g_SA *(0,1,0,0),依此类推。

我见过这个讨论过的最好的地方(我从中学到的)是A Mathematical Introduction to Robotic Manipulation by Murray, Li and Sastry,你感兴趣的章节是2.3.1。

+0

你是什么意思与SE(3) 我也不是很确定你在这里陈述什么。你能提供一些代码示例吗? 我读过什么地方矩阵的具体元素代表,它显示了哪些组成的本地轴的元素,哪些元素组成了元素的位置。我不需要繁殖任何东西。 另外,我认为LH很重要,因为LH矩阵的组织方式与RH矩阵不同(row-major/column-major或其他) – xcrypt

+0

我添加了对均匀坐标的非常简短的解释。我的帖子和Google中的链接有更多的细节。就LH和RH而言,唯一改变的是你测量角度的方向。对于RH系统,您使用右手规则,并且逆时针方向上的角度为正值。与LH系统相反。当你停留在一个或另一个时,数学是相同的(这完全是一个约定的问题)。 – vlsd