C++ C++;将三维向量(点)旋转到不同的对象空间

C++ C++;将三维向量(点)旋转到不同的对象空间,c++,vector,3d,ogre3d,rotation,C++,Vector,3d,Ogre3d,Rotation,我正在为OBB算法研究碰撞检测算法,我已经达到了它的工作点,但是我发现通过一些黑客代码(使用Ogre3d节点)在框空间中以一种非常无效的方式找到了等效的线,但是我真的希望用一些小算法尽可能容易地完成 基本上我有两个点和一个盒子(为了简单起见,每个盒子可以使用一个点的解决方案),这两个点组成一条线。长方体可以任意旋转,因此我需要旋转长方体,使其与轴对齐。为此,我还需要将点旋转到相同的轴对齐空间。当我在二维空间中工作时,我能够做到这一点,但我很难找到三维空间的解决方案 我很容易理解这个概念,我想把一

我正在为OBB算法研究碰撞检测算法,我已经达到了它的工作点,但是我发现通过一些黑客代码(使用Ogre3d节点)在框空间中以一种非常无效的方式找到了等效的线,但是我真的希望用一些小算法尽可能容易地完成

基本上我有两个点和一个盒子(为了简单起见,每个盒子可以使用一个点的解决方案),这两个点组成一条线。长方体可以任意旋转,因此我需要旋转长方体,使其与轴对齐。为此,我还需要将点旋转到相同的轴对齐空间。当我在二维空间中工作时,我能够做到这一点,但我很难找到三维空间的解决方案


我很容易理解这个概念,我想把一支铅笔插进一个粘土盒子里,然后旋转盒子使之与轴对齐,然后进行轴对齐的计算,这样做会更容易,但是让线旋转背后的代码给我带来麻烦。任何帮助都将不胜感激:)

如果你有三维的长方体,那么你可以认为它是由三个单位向量a、b和c生成的,每个单位向量a、b和c都存在于三维空间中,还有一些原点O。作为预处理步骤,首先假设O是原点,因此框中的点由两个向量u=(x0,y0,z0)和v=(x1,y1,z1)定义。您现在感兴趣的问题是-假设我们应用旋转变换来旋转长方体,使a、b和c轴分别与x、y和z轴对齐,那么u和v点是什么

我可能错了,但我认为这可以通过一些简单的数学来完成。您可以从思考如何将标准规范基转换为长方体向量定义的基开始。该矩阵由下式给出:

      | | | 
M = ( a b c )
      | | | 
        - a -
M^T = ( - b - )
        - c -
即列为a、b和c的矩阵

现在我们有了矩阵M,我们可以考虑将该变换(即,将单位向量a、b和c映射到轴对齐的单位向量)转化为M、M-1的逆矩阵。但是,如果您选择了将边界框定义为正交的向量a、b和c(假设向量是正交的,您可以通过规范化它们来实现),那么M-1=MT,M的转置,由

      | | | 
M = ( a b c )
      | | | 
        - a -
M^T = ( - b - )
        - c -
也就是说,矩阵的第一行是a,第二行是b,第三行是c。给定这些向量,如果将长方体旋转为MTu和MTv,则可以计算出u点和v点的位置,这两个表达式都不太难计算

希望这有帮助

非常复杂:)我将不得不测试一些东西,以实际尝试并获得正确的结果,因为这比我最初认为的要复杂得多。谢谢你的帮助,我一定会朝着我需要的方向努力。