特定の時間 (または速度) で 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 ヘルツのレートでノードに適用されます。私はまぶたの速度を考慮していません。また、ここでの「補間」は本当に汚いです...オイラーを四元数または回転行列に変換する方が良いですか?
70ms 以内に 280mm/s の下向きのピーク速度を考慮し、約 100mm/s でまぶたを開く、blink(500ms) のような関数は本当に役に立ちます。