C++ 基于方向向量的三维旋转

C++ 基于方向向量的三维旋转,c++,math,C++,Math,我有一个对象在三维空间中移动(原点在中心)。我正在计算移动时的方向向量,并使用它在对原点处的对象进行任何变换之前应用旋转 direction vector (position, previousPos): positionX-previousPosX/mag etc transformation rX = acos(direction_vector_x); etc rY = acos(direction_vector_y); rZ

我有一个对象在三维空间中移动(原点在中心)。我正在计算移动时的方向向量,并使用它在对原点处的对象进行任何变换之前应用旋转

      direction vector (position, previousPos): positionX-previousPosX/mag etc

      transformation

      rX = acos(direction_vector_x); etc
      rY = acos(direction_vector_y);
      rZ = acos(direction_vector_z);

      rotate(rZ, rX,rY) // axis rotation 

      draw object

对象最初处于位置,但随后随机出现在对角线上,并以错误的方式出现。之后,旋转是平稳的,但有时会向后或颠倒?有人能告诉我怎么计算吗?谢谢

仅从单个矢量创建三维坐标系是不够的

  • 您至少需要一个与方向不平行的向量,如“向上”或“北”向量
  • 然后使用叉积生成两个相互垂直的向量和方向
  • 因为你有3个轴,原点也应该是已知的
  • 因此,构造变换矩阵并使用它代替欧拉角

arccos的范围不是[0,2pi)!您需要添加一个常量以使所有内容“一致”,取决于x或y是否大于或小于零。编辑:当我看到你的意思时,请你解释一下多一点?1矢量就足够了。@user1095108仅用于方向…但这会导致沿OP中提到的边进行“随机”旋转,所以不,这是不够的(除非对象是平行于方向的单线)同样的东西也可以包含在一个四元数中。@user1095108是的,但四元数是4D。你需要一块额外的信息…这些信息不能从单个3D向量中提取。这就是为什么添加一个向量并不重要,但必须始终是相同的,并且不在方向向量上。或者我在数学上遗漏了一些新的东西?N你没有遗漏任何东西,你可以把你的答案扩大一点。你可以写,2个向量或1个四元数。