2016-09-11 6 views
0

See this DiagramНеобходимость 2D Ротация интерполяция логика

мне нужна логика для интерполяции вращения

public static float interPolateKeyForAngle(int startFrame, int endFrame, int currentFrame, float initialAngle, float endAngle) 
{ 
    int frameDif = endFrame - startFrame + 1; 
    int difCurrentFrame = Math.abs(startFrame - currentFrame) + 1; 

    //Calculate here 
} 

Я знаю угол в 0-й позиции и конечным углом в 10-м положении, начиная мне нужно вычислить 1 по 9-й позиции углы некоторые один, пожалуйста, помогите мне.

Спасибо.

+0

что-то вроде этого: 'return ((endAngle - initialAngle) * (currentFrame - startFrame))/(endFrame - startFrame) + initialAngle;' –

+0

Я уже пробовал этот расчет, его только вращать по часовой стрелке, мне нужно рассчитать кратчайший путь и найти угол в этом направлении. –

+0

Это может означать, что вам нужно нормализовать разницу углов между -Pi и Pi. Попробуйте использовать 'delta = endAngle - initialAngle; delta = fmod (delta + 3 * Pi, 2 * Pi) - Pi'. – LutzL

ответ

0

Дискретная линейная интерполяция между двумя значениями всегда

(V0.(n-i) + V1.i)/n 

, где 0≤i≤n, для n интервалов (то есть n-1 промежуточных значений).

+0

Проблема заключается в том, что углы обертываются вокруг 360 ° градусов, и поэтому этот алгоритм иногда терпит неудачу. Направление интерполяции должно быть указано и, я думаю. – ja72

+0

@ ja72: вы должны были упомянуть об этом в вопросе. Добавьте в 'V1' подходящее кратное' 360 ° ', так что' V1-V0' - это полный угол поворота в правильном направлении. Обратите внимание, что невозможно найти многократное из заданных 'V0' и' V1'. –