两个空格之间的旋转矩阵

时间:2015-06-24 09:49:40

标签: matrix graphics 3d rotation coordinate-systems

我正在努力将Razer Hydra整合到我的项目中。整合并不困难,基本功能已经运行良好。 不过,我有一个问题,我自己无法解决。 这是关于轮换的。问题是Sixense SDK空间和我的空间不一样。但唯一的区别是Z轴的标志。 在这里,您可以在图片上看到它以便更好地理解:

http://imgur.com/UShwRIA

现在我从每个hydra控制器获得一个3x3旋转矩阵。 但要使用它我必须将旋转矩阵转换为我的空间的旋转矩阵。我是这样做的:

if (clonedUserGuess.PegPosition1 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition1.Colour))
                pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });


            if (clonedUserGuess.PegPosition2 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition2.Colour))
                pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });

            if (clonedUserGuess.PegPosition3 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition3.Colour))
                pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });

            if (clonedUserGuess.PegPosition4 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition4.Colour))
                pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });


            return pegResultContainer;

现在使用此旋转矩阵的结果当然是错误的。但我无法找到解决它的方法。我尝试了大量的配置,首先通过转换矩阵来反转z值,因为我不确定sixense矩阵的结构。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我认为,sixense矩阵是某种模型变换。您将在空间A(sixense空间)中获得此变换,并且您希望表示空间B(您的空间)中的变换。

你知道两个空格之间的系统变换是一个简单的反射矩阵:

          / 1  0  0  0 \
T(B<-A) = | 0  1  0  0 |
          | 0  0 -1  0 |
          \ 0  0  0  1 /

要将空间A M_A中的模型变换转换为空间B M_B中的模型变换,您必须乘以:

M_B = T(B<-A) * M_A

这等于否定矩阵M_A的第三行(假设列主矩阵)。看起来这可能是代码中的所有z。但它也可以是所有..3