Как правильно интерполировать между двумя углами эйлера с заданным временем (или скоростью)?Интерполирующие углы эйлеров/матрицы вращения с заданным временем
Например, я хочу реализовать простой мигание, сначала повернув крышки, а затем снова. Время мигания должно составлять от 50 до 500 мс. На данный момент я просто вычислить й значение (вниз):
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 мм/с, действительно поможет мне.
Я не совсем понимаю, о чем вы на самом деле спрашиваете здесь. Вы спрашиваете о математике или коде? – doctorlove
Возможный дубликат [Интерполирование между матрицами вращения] (http://stackoverflow.com/questions/5580283/interpolating-between-rotation-matrices) – Ali
im спрашивает о коде, как правильно реализовать что-то вроде мигания с заданной скоростью и продолжительностью of blink – EBBLER