Страница 1 из 1

Кватернион после лерпа, что может случиться...

СообщениеДобавлено: 14 янв 2010, 15:04
Paul Siberdt
Извиняюсь, у меня почти истерика...
Считаю Dot двух параллельных кватернионов и получаю -1.
Сами ротации выглядат так:
(0.0, 0.7, 0.0, -0.7) (0.0, -0.7, 0.0, 0.7)

Вопрос:
Светит ли мне что огрести в будущем, считая эти две ротации равными, или лучше перестраховаться пересчетом:
Код: Выделить всё
   q.x = -q.x;
   q.y = -q.y;
   q.z = -q.z;
   q.w = -q.w;

:-s

Re: Идентичность кватернионов

СообщениеДобавлено: 14 янв 2010, 15:21
Paul Siberdt
сорри, разобрался, сам дурак :o)
... блин.. не разобрался :(

РЕШЕНИЕ

СообщениеДобавлено: 14 янв 2010, 16:17
Paul Siberdt
Он-па, матих! 8()

Запоминайте вот такую штуку на будущее:

Если приспичило считать дот-продукт между ротациями, а перед этим была заюзана интерполяция, имеем в виду:
qA = Quaternion.Lerp ( qA, qB, factor)

Здесь, если factor != 1 (а нахрена ему быть == 1?), то в результате лерповой цепочки qA поменяет свои компоненты на противоположные. То бишь, qA.x = -qA.x и так далее.
Соответственно, Dot этих кватернионов, при их параллельности и однонаправленности даст -1

Если же вы хотите сохранить компоненты кватерниона и получить верный дот == 1 следует использовать формулу:
qA = Quaternion.Lerp ( qB, qA, (1-factor))

Возможно, все про это знают со времен, когда сосали мамину сиську, но вот мне помог с этим разобраться "физический" программист, причем советом "а чо будет, если поменять местами?" :-?