2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Интересная формула для поворота одного вектора вокруг другог
Сообщение12.11.2013, 17:55 


25/10/10
14
К Computer Science имеет маленькое отношение, но я впихну тему сюда, так как она, в частности, про программирование.

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

$v^\prime = qvq^{-1}$, где $q=\cos\varphi + p\sin \varphi$, $\lVert p\rVert = 1$; p,v - чисто "мнимые" кватернионы.

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

$a \times b$ у меня векторное произведение, а $(a,b)$ - скалярное

$t = 2  \sin \varphi \; p \times v$
$v^\prime = v + \cos \varphi t + \sin \varphi \; p \times t$

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

Сначала подставим t в формулу:
$v^\prime = v + 2 \cos \varphi \sin \varphi \; p \times v + 2 \sin^2 \varphi \; p \times (p \times v)$
Далее, возьмем v перпендикулярным p. Из формулы умножения чисто "мнимых" кватернионов $pv = p \times v - (p, v)$ (а в нашем случае $pv = p \times v$) имеем:
$v^\prime = v + 2 \cos  \varphi \sin \varphi \; p \times v + 2 \sin^2 \varphi \; p (pv)$ или в силу ассоциативности умножения
$v^\prime = v + 2 \cos  \varphi \sin \varphi \; p \times v + 2 \sin^2 \varphi \; (pp)v$ или в силу $p \times p = 0$, $pp = -(p,p) = -1$ (напомню, $\lVert p \rVert = 1$)
$v^\prime = v + 2 \cos  \varphi \sin \varphi \; p \times v - 2 \sin^2 \varphi \; v$
$v^\prime = 2 \cos  \varphi \sin \varphi \; p \times v + (1 - 2 \sin^2 \varphi)v$

Так как $(pv, pv) = (p,p)(v,v) = (v,v)$ и $pv = p \times v$ перпендикулярен $v$, то квадрат нормы $v^\prime$ будет

$(v^\prime,v^\prime) = (4 \cos^2 \varphi \sin^2 \varphi + (1-2\sin^2 \varphi)^2)(v,v)$

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

 Профиль  
                  
 
 Re: Интересная формула для поворота одного вектора вокруг другог
Сообщение12.11.2013, 18:18 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Все хорошо, $4\cos^2 \varphi \sin^2\varphi + (1 - 2\sin^2\varphi)^2 = 1 - 4 \sin^2 \varphi + 4\sin^2\varphi(\sin^2\varphi+\cos^2\varphi) = 1$

 Профиль  
                  
 
 Re: Интересная формула для поворота одного вектора вокруг другог
Сообщение12.11.2013, 18:32 


25/10/10
14
Xaositect в сообщении #787950 писал(а):
Все хорошо, $4\cos^2 \varphi \sin^2\varphi + (1 - 2\sin^2\varphi)^2 = 1 - 4 \sin^2 \varphi + 4\sin^2\varphi(\sin^2\varphi+\cos^2\varphi) = 1$


Да, похоже я запаниковал раньше времени, не помучав это выражение. Ну ладно, далее тоже всё хорошо должно быть. Спасибо

 Профиль  
                  
 
 Re: Интересная формула для поворота одного вектора вокруг другог
Сообщение13.11.2013, 15:29 
Заслуженный участник


27/04/09
28128

(Оффтоп)

shamaz.mazum в сообщении #787942 писал(а):
чисто "мнимые" кватернионы
А кавычки-то зачем? Это вполне себе термин. :-)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group