1. Отдел
Деление кватерниона с именем p на кватернион с именем q является не чем иным, как умножением p на , равным q .
Это эквивалентно умножению p на сопряжение q (которое по определению равно a - bi - cj - dk ) и деление произведения на скаляр, равный q норма квадрат:
Отсюда очевидно, откуда взялась эта denominator
часть:
Теперь давайте изменим термины в vec3
суммах для лучшей читаемости:
vec3(
-q1.w*q2.x + q1.x*q2.w - (q1.y*q2.z - q1.z*q2.y),
-q1.w*q2.y + q1.y*q2.w - (q1.z*q2.x - q1.x*q2.z),
-q1.w*q2.z + q1.z*q2.w - (q1.x*q2.y - q1.y*q2.x)
)
И теперь внезапно становится ясно, что происходит:
vec3(
-q1.w * q2.x + q1.x * q2.w - (q1.y*q2.z - q1.z*q2.y),
-q1.w * q2.y + q1.y * q2.w - (q1.z*q2.x - q1.x*q2.z),
-q1.w * q2.z + q1.z * q2.w - (q1.x*q2.y - q1.y*q2.x)
)
...
-q1.w * q2.xyz + q1.xyz * q2.w - (cross(q1.xyz, q2.xyz))
Так что, да, кватернионное деление - это просто обычное умножение, с множителем, являющимся взаимным. Вот откуда берутся минусы, см. Определение выше.
2. Касательная гиперболическая
Во-первых, определения. Для каждого q = a + bi + cj + dk = a + v̅ :
Итак, чтобы получить e q и e –q , вам нужно только вычислить следующие значения: e a , || v̅ || , sin (|| v̅ ||) , cos (|| v̅ ||) .
Для вычисления e –q вы должны взять обратную величину, равную e a и умножить ее на остаток уравнения с знаки перевернуты. Это не займет много времени, поскольку все значения, из которых он состоит, уже вычислены. Один exp()
звонок по запросу =)