К Computer Science имеет маленькое отношение, но я впихну тему сюда, так как она, в частности, про программирование.
Предыстория. Я пишу библиотеку для работы с воксельными октодеревьями и буду писать библиотеку для volumetric raycasting. Жидхаб, если кому интересно:
https://github.com/shamazmazum/voxvision. Так вот: для поворота вектора вокруг другого сейчас модно использовать кватернионы, так как 4 single floating point числа вмещаются в 1 XMM регистр. Общеизвестная формула для поворота вектора v вокруг p на угол 2 фи такая:

, где

,

; p,v - чисто "мнимые" кватернионы.
В интернете (тут:
http://mollyrocket.com/forums/viewtopic.php?t=833&sid=3a84e00a70ccb046cfc87ac39881a3d0) я нашел следующую формулу, которая, якобы, полный аналог того, что выше, но считается быстрее. Перепишу её тут с учетом определения q выше:

у меня векторное произведение, а

- скалярное

И вот тут или я что-то не понял, или формула вообще кривая. Вот мой вариант "контрдоказательства" (у них там доказательство есть, но пару моментов я не улавливаю):
Сначала подставим t в формулу:

Далее, возьмем v перпендикулярным p. Из формулы умножения чисто "мнимых" кватернионов

(а в нашем случае

) имеем:

или в силу ассоциативности умножения

или в силу

,

(напомню,

)


Так как

и

перпендикулярен

, то квадрат нормы

будет

Явно норма не сохраняется и формула фигня. Но может я где-то ошибся? Есть ли в самом деле формула поворота более оптимальная для расчетов (с использованием simd инструкций sse, к примеру), нежели классическая, что дана выше? Может даже кто-то сталкивался с той формулой на форуме?