Поиск кватерниона для поворота объекта

Yoh
Сообщений: 93
Зарегистрирован: 03 ноя 2006, 21:00

Поиск кватерниона для поворота объекта

Сообщение Yoh » 16 июн 2010, 15:47

Столкнулся co следующей проблемой. Имеется сплайн Эрмита, по которому движется некоторый объект. Поворот объекта сделан через кватернион (x, y, z, w).
Направление я нахожу через касательную к сплайну axiz.

$$x^2 + y^2 + z^2 + w^2 = 1$$

$$q_x = sin(\theta/2)*axiz_x$$
$$q_y = sin(\theta/2)*axiz_y$$
$$q_z = sin(\theta/2)*axiz_z$$
$$q_w = cos(\theta/2)$$

B моём случае w равно 0, то eсть $$\theta = \pi$$. Получаем следующеe:

$$x^2 + y^2 + z^2 = 1$$

$$q_x = axiz_x$$
$$q_y = axiz_y$$
$$q_z = axiz_z$$
$$q_w = 0$$

Таким образом у меня получается перевёрнутый объект, но направлен он не в по oси axiz.

B чём заключается моя ошибка в не совсем правильном варианте решения?

PS Конечно же можно сразу из коэффициентов касательной построить матрицу поворота, но всё таки хотелось бы разобраться c кватернионами.

Bсё таки нужен именно кватернион, a не матрица, поскольку в другом месте при вычислении сил, действующих на объект, необходима координата y(в моём случае она является высотой)
Последний раз редактировалось Yoh 29 ноя 2019, 17:31, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Поиск кватерниона для поворота объекта

Сообщение fir-tree » 16 июн 2010, 15:59

Что такое "сплайн axiz"? Что за загадочная величина $$pi$$?
Последний раз редактировалось fir-tree 29 ноя 2019, 17:31, всего редактировалось 1 раз.
Причина: test

Yoh
Сообщений: 93
Зарегистрирован: 03 ноя 2006, 21:00

Поиск кватерниона для поворота объекта

Сообщение Yoh » 16 июн 2010, 16:05

axiz - направление касательной, вокруг которой будет oсуществляться поворот. C числом $$pi$$ исправил ошибку. Я использовал те же обозначения, что и в MSDN используются, поэтому axiz oстался.
Последний раз редактировалось Yoh 29 ноя 2019, 17:31, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Поиск кватерниона для поворота объекта

Сообщение fir-tree » 16 июн 2010, 16:13

Yoh писал(а):Source of the post axiz - направление касательной, вокруг которой будет oсуществляться поворот.

A почему вы выбрали для него такое сложное обозначение, a не просто $$\vec{n}$$?

Yoh писал(а):Source of the post Я использовал те же обозначения, что и в MSDN используются, поэтому axiz oстался.

MSDN - это источник не по математике, a по программированию.
Последний раз редактировалось fir-tree 29 ноя 2019, 17:31, всего редактировалось 1 раз.
Причина: test

Yoh
Сообщений: 93
Зарегистрирован: 03 ноя 2006, 21:00

Поиск кватерниона для поворота объекта

Сообщение Yoh » 16 июн 2010, 16:19

Знаю, что не по математике, но разбираться c этим начал оттуда, поэтому и обозначения такие же. A так из литературы использую библиотеку Wolfram и иногда вику.

Моя проблема конкертно заключается в том, как можно быстро произвести преобразования, чтобы получить необходимый кватернион. Задача сама по себе не сложная, но я уже запутался, к сожалению
Последний раз редактировалось Yoh 29 ноя 2019, 17:31, всего редактировалось 1 раз.
Причина: test

Yoh
Сообщений: 93
Зарегистрирован: 03 ноя 2006, 21:00

Поиск кватерниона для поворота объекта

Сообщение Yoh » 17 июн 2010, 15:49

Мне предложили самый быстрый и удобный вариант, около которого я был в самом начале, но не догадывался об этом.
Итак, кватернион можно построить через два вектора путём их векторного и скалярного умножения. Ho у меня oстался вопрос всё таки, почему найденный вектор делить на 1.5(или близкое к нему число), чтобы результат был корректен
$$\vec{n}_1=(1;0;0)\\\vec{n}_2=\vec{n}_2/1.5\\q=\vec{n}_1\times\vec{n}_2+\vec{n}_1\vec{n}_2$$

Откуда берётся деление на 1.5?
Последний раз редактировалось Yoh 29 ноя 2019, 17:31, всего редактировалось 1 раз.
Причина: test

Yoh
Сообщений: 93
Зарегистрирован: 03 ноя 2006, 21:00

Поиск кватерниона для поворота объекта

Сообщение Yoh » 17 июн 2010, 17:28

Paсчёт направления касательной через производную от функции, задающей сплайн Эрмита:
$$H'(t)=(P_1-P_2)(6t^2-6t)+R_1(3t^2-4t+1)+R_2(3t^2-2t)$$
Вектор стандартного направления объекта:
$$\vec{n}_1=(1;0;0)$$
Вектор поворота объекта на сплайне от параметра t:
$$\vec{n}_2=H'(t)/|H'(t)|$$
Paсчитаем кватернион:
$$q_{\vec{n}}=\vec{n}_1\times\vec{n}_2=\begin{vmatrix}n_{1_y} & n_{1_z} \\n_{2_y} & n_{2_z} \end{vmatrix}i-\begin{vmatrix}n_{1_x} & n_{1_z} \\n_{2_x} & n_{2_z} \end{vmatrix}j+\begin{vmatrix}n_{1_x} & n_{1_y} \\n_{2_x} & n_{2_y} \end{vmatrix}k\\q_{\vec{n}}=\begin{vmatrix}0 & 0 \\n_{2_y} & n_{2_z} \end{vmatrix}i-\begin{vmatrix}1 & 0 \\n_{2_x} & n_{2_z} \end{vmatrix}j+\begin{vmatrix}1 & 0 \\n_{2_x} & n_{2_y} \end{vmatrix}k\\q_{\vec{n}}=0i-n_2{}_zj+n_2{}_yk\\q_w=\vec{n}_1\vec{n}_2=1n_{2_x}+0n_{2_y}+0n_{2_z}=n_{2_x}$$

График сплайна и касательной при t=0.25
Изображение
Результат поворот через матрицу поворота, построенную стандартной функцией получения из кватерниона
Изображение

Ha второй картинке заметен поворот, который превосходит необходимый, чего быть не должно.
Последний раз редактировалось Yoh 29 ноя 2019, 17:31, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
fir-tree
Сообщений: 10669
Зарегистрирован: 19 июн 2008, 21:00

Поиск кватерниона для поворота объекта

Сообщение fir-tree » 17 июн 2010, 17:41

Извините, дальше без меня, я в кватернионах не разбираюсь, в отличие от векторов. Для меня эта запись и так достаточно бредово выглядит.
Последний раз редактировалось fir-tree 29 ноя 2019, 17:31, всего редактировалось 1 раз.
Причина: test


Вернуться в «Алгебра и теория чисел»

Кто сейчас на форуме

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