在给定时间内插入欧拉角/旋转矩阵

时间:2013-07-11 09:34:27

标签: c++ 3d rotation interpolation euler-angles

如何在给定时间(或速度)的2个欧拉角之间正确插值?

例如,我想实现一个简单的闪烁,首先向下旋转盖子然后再向上旋转。眨眼的时间应该在50到500毫秒之间。目前我只是计算x值(下降):

Eigen::Vector3f rotateLeftLidDown(float step)
{
return Eigen::Vector3f(-step*COMPLETE_CLOSURE,0,0);
}


//INTERPOLATION
float duration =gen_random_float(0.05f,0.5f);
  for(float i=0;i<1;i=i+(duration))
{
 LeftLid.push_back(rotateLeftLidDown(i));
}

 for(float i=1;i>0;i=i-(duration))
  {
    LeftLid.push_back(rotateLeftLidUp(i));
  }

每个计算步骤都会从麻袋中弹出并以 100赫兹的速率应用于节点。这种方法可以快速或慢速闪烁,但它似乎并不正确。我不考虑眼睑的速度,而且这里的“插值”真的很脏......将euler转换成四元数或旋转矩阵会更好吗?

像闪烁(500ms)这样的功能,在70ms内考虑向下280mm / s的峰值速度,以约100mm / s的速度打开眼睑对我有帮助。

1 个答案:

答案 0 :(得分:0)

我认为这是3d?在这种情况下,使用四元数来表示您在空间中的方向。然后插值只是四元数的简单插值。