Интерполяция эйлеровых углов / матриц вращения с заданным временем

Как я могу правильно интерполировать между двумя углами Эйлера с заданным временем (или скоростью)?

Например, я хочу реализовать простое мигание, поворачивая крышки сначала вниз, а затем снова вверх. Время мигания должно составлять от 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));
}

Каждый шаг вычисления позже извлекается из мешка и применяется к узлам в 100hertz оценить .. этот подход может мигать быстро или медленно, но это просто не кажется правильным. Я не считаю, что скорость век и «интерполяция» здесь действительно грязные … лучше ли превратить эйлера в кватернионы или матрицы вращения?

Такая функция, как мигание (500 мс), которая учитывает пиковую скорость для нисходящих 280 мм / с в течение 70 мс и открывает веки со скоростью около 100 мм / с, действительно помогла бы мне.

0

Решение

Я полагаю, это 3d? В этом случае используйте кватернионы для представления вашей ориентации в пространстве. Тогда интерполяция — это просто простая интерполяция кватернионов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector