【问题标题】:Interpolating euler angles/rotation matrices with a given time用给定时间插值欧拉角/旋转矩阵
【发布时间】:2013-07-11 09:34:26
【问题描述】:

如何在给定时间(或速度)下正确地在 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 赫兹 的速率应用于节点。这种方法可以快速或慢速闪烁,但它看起来并不正确。我不考虑眼睑的速度,而且这里的“插值”真的很脏......将欧拉转换为四元数或旋转矩阵更好吗?

像眨眼(500ms)这样的函数,它考虑在 70ms 内向下 280mm/s 的峰值速度并以大约 100mm/s 的速度张开眼睑,这对我很有帮助。

【问题讨论】:

  • 我不清楚你在这里实际问的是什么。你问的是数学还是代码?
  • 我在询问代码如何正确实现以给定速度和眨眼持续时间进行眨眼等操作

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


【解决方案1】:

我假设这是 3d?在这种情况下,使用四元数来表示您在空间中的方向。那么插值就是四元数的简单插值。

【讨论】:

  • 这对我有什么帮助?我询问这个​​“简单插值”的持续时间和速度
  • 因为使用四元组比尝试处理欧拉角更简单,因为所有方向都是相等的,而在欧拉角中则不然。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 2013-01-14
  • 2012-08-16
  • 1970-01-01
相关资源
最近更新 更多