?

Log in

No account? Create an account
23 мар, 2009 @ 07:08 Ещё вопрос. :) Интерполяция кватернионов.
Матрицы интерполируются линейно, и это просто прекрасно. Для интерполяции кватернионов есть функция slerp(Q1,Q2,f), которая получает из двух кватернионов Q1 и Q2 взвешенную сумму с весами f, 1-f.
А что делать, если их 3 или 4? Т.е. есть набор кватернионов Q1...Qn, где 1<=n<=4.
Есть набор соответствующих им весов F1...Fn, где сумма Fi (1..n) ==1
Возникает вопрос: а как здесь получить результирующий кватернион, точнее, заданное им результирующее вращение, являющееся взвешенной суммой заданных выше?
Задача, вообще говоря, довольно типовая и по идее должна иметь описанное решение.
gekisai:
[User Picture Icon]
From:glebedev
Date:Март, 23, 2009 08:09 (UTC)
(Ссылка)
я думаю можно понять. Можно взять три кватерниона, например (w,x,y,z)
(0.7071,0.7071,0,0)
(0.7071,0,0.7071,0)
(0.7071,0,0,0.7071)

и понять какой результирующий должен быть при разных кофициенах. это должно дать идею принципу инетполяции.

Ещё можно поискать аналог для барицентрической системы координат.

Точного ответа я не знаю.
(Ответить) (Ветвь дискуссии)
[User Picture Icon]
From:dubor
Date:Март, 23, 2009 10:26 (UTC)
(Ссылка)
>Матрицы интерполируются линейно, и это просто прекрасно.
какие такие матрицы можно интерполировать линейно?
(Ответить) (Ветвь дискуссии)
[User Picture Icon]
From:iridix
Date:Апрель, 3, 2009 21:44 (UTC)
(Ссылка)
вопрос прямиком означает что ты не въезжаешь в тему или что-то у тебя не то...
есть Q1...Qn положений

так вот. в slerp должны входить три кватерниона. slerp(a,b, t);
где a - текущее положение на кривой (треке, пути)
b - следующий
t - время [0...1.0]

как только t > 1.0 ты из него вычитаешь 1.0
и перепрыгиваешь на следущий узел. а кватернионный slerp тем и хорош,
что при подобных прыжках узлов их стык, несмотря на прыжок сделает гладким.
концы обрабатывать отдельно. или зацикливать петлю трека, или еще как

полезно:
http://www.enlight.ru/demo/faq/smth.phtml?query=alg_curves_splines
(Ответить) (Ветвь дискуссии)
From:Вячеслав Тарасов
Date:Июль, 30, 2015 18:02 (UTC)
(Ссылка)
Здесь Вы не правы. Каждый следующий SLERP будет вращать от одного положения тела к другому вокруг новой оси (отличной от предыдущей), поэтому рывки будут заметны.
(Ответить) (Уровень выше) (Ветвь дискуссии)