Russian Qt Forum
Ноябрь 22, 2024, 10:20
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Где же СУТЬ ? (изучение классики)
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Где же СУТЬ ? (изучение классики) (Прочитано 12317 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Где же СУТЬ ? (изучение классики)
«
:
Апрель 02, 2020, 13:54 »
Добрый день
Попалось на глаза
это
. Это там где "много спецов" (как говорил незабвенный Витек). Ну отвечающий во всей красе, тут и "а зачем это?" (извлекать угол), и отсылание к книгам (которые самому страшно открыть), в общем мыслишки ни одной, что впрочем ясно сразу по смачному тыканию.
Желание автора темы "докопаться" выглядит симпатично, но никаких особых усилий не требует. Мол, "не понимаю, объясните". Заметим, что когда он (якобы) "уяснил", то не стал вдаваться ни в никакие объяснения (нажрался и отвалил), ах как быстро меняются люди!
Однако сам "метод почемучки" мне нравится, если человек понимает, то он легко ответит на любой вопрос. А то что многие вопросы глупые - нормально. Я вот тоже кватернионы не очень понимаю. Так, на уровне "почитал", т.е. умею "пользоваться ф-циями". А в последнее время они как-то часто встречаются, и я ловлю себя на мысли что переписываю чужой код не очень-то его понимая, что не есть хорошо. Попробую позадавать глупые вопросы, напр
1)
Цитировать
QVector3D QQuaternion::rotatedVector(const QVector3D & vector) const
Rotates vector with this quaternion to produce a new vector in 3D space. The following code:
QVector3D result = q.rotatedVector(vector);
is equivalent to the following:
QVector3D result = (q * QQuaternion(0, vector) * q.conjugate()).vector();
Как это (так лихо) получается? Какой смысл первого умножения и какой второго?
2) На вопросы оригинальнойтемы выше думаю отвечу (они совсем уж глупые), кроме этого (там он растворился в обычном ага/угу)
Цитировать
Кстати, я правильно понимаю, что ОДИН кватернион однозначно полностью описывает ориентацию объекта в пространстве?
Я знаю "правельный ответ" (да) но затрудняюсь объяснить
3) Почему везде фигурирует
половина
угла ? Тут я (смутно) догадываюсь, но хотелось бы четче
«
Последнее редактирование: Апрель 02, 2020, 13:56 от Igors
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #1 :
Апрель 07, 2020, 11:53 »
Выдалась свободная минутка, решил поразбираться. Вращение вектора (v) кватернионом (q) (псевдокод)
Код:
v" = q * v * q.inverted();
Поэтому надо изучать операцию умножения.
Вот пишут
Цитировать
]Умножение кватернионов крайне полезная штука. Результатом умножения является кватернион, который после поворота даёт такой же результат, если последовательно выполнить развороты умножаемыми кватернионами. Причём разворот будет происходить в локальной для поворачиваемого вектора системе отчёта, т. е. система отчёта поворачиваемого вектора также двигается.
Ось малюнок (аттач)
Ну в прынцыпе понятно. Хотя где он такую тройку выдрал - хз, ну ладно, имеет право взять любую. Ствло быть, первый кватернион вращает вокруг Z на 90, а второй вокруг X на -90. В итоге вращение на -90 вокруг Y.
Но все равно неясно как же он вращает.
Код:
q * q.inverted() = identity
Так нулевой (ничего не вращает). Но если между ними вставить вектор (по сути поворот вокруг оси вектора на 180),
Код:
v' = q * v * q.inverted();
То каким-то чудесным образом на выходе получается повернутый вектор, т.е. он выпадает в осадок как ось произведения. Чего это?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #2 :
Апрель 07, 2020, 11:58 »
векторное произведение некоммутативно
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #3 :
Апрель 07, 2020, 12:36 »
Я думаю, если вы нарисуете два векторных произведения то чудесным образом окажутся что оно вращает правильно
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #4 :
Апрель 08, 2020, 09:27 »
Цитата: kambala от Апрель 07, 2020, 11:58
векторное произведение некоммутативно
Так я ничего и не коммутировал
Для умножения кватернионы представляются как
Цитировать
q.x * i + q.y * j + q.z * k + q.scalar
Т.е. действительная часть и 3 комплексных которые множатся "по Гамильтону", векторное произведение - лишь одна из компонентов рез-та.
Цитата: Авварон от Апрель 07, 2020, 12:36
Я думаю, если вы нарисуете два векторных произведения то чудесным образом окажутся что оно вращает правильно
Хороший метод (визуализация), но как его в данном случае применить? Нарисовать 2 вектора (множители кватернионы) и (как-то) показать углы? Это ничего не дает. Может чуть лучше рисовать СК, как ее (последовательно) поворачивает каждый кватернион, но все равно неясно как получаются новые ось и угол
Записан
Inhibitor
Гость
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #5 :
Апрель 08, 2020, 10:09 »
Цитата: Igors от Апрель 08, 2020, 09:27
Может чуть лучше рисовать СК, как ее (последовательно) поворачивает каждый кватернион, но все равно неясно как получаются новые ось и угол
Ну вдруг. Кликабельная, интерактивная, трехмерная демонстрашка созданая на редком языке
https://demonstrations.wolfram.com/QuaternionAdditionAndMultiplication/
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #6 :
Апрель 08, 2020, 13:36 »
Цитата: Inhibitor от Апрель 08, 2020, 10:09
Ну вдруг. Кликабельная, интерактивная, трехмерная демонстрашка созданая на редком языке
https://demonstrations.wolfram.com/QuaternionAdditionAndMultiplication/
Ну хорошо, посмотрим что на редких языках. Возьмем простой пример
Есть вектор X (1, 0, 0). Мы хотим повернуть его "на плоскости (XY)" (как в школе) на 30 градусов. Т.е. это поворот вокруг оси Z (0, 0, 1). Должно получиться
Цитировать
(1, 0, 0) -> (0.866, 0.5, 0)
Можно это увидеть с помощью рекомендованной демонстрашки? Ну хотя бы кватернион после первого умножения? Потому что я, правду сказать, "ни асилил". Спасибо
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #7 :
Апрель 08, 2020, 15:13 »
Я тоже ниасилил демонстрашку, там сначала надо умножить (0, 0, 1) на (1, 0, 0) а потом результат умножить на inverted видимо (0, 0, -1) ?
Но вбивать числа там дико неудобно и я быстро сломался)
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #8 :
Апрель 09, 2020, 09:51 »
Цитата: Авварон от Апрель 08, 2020, 15:13
Я тоже ниасилил демонстрашку, там сначала надо умножить (0, 0, 1) на (1, 0, 0) а потом результат умножить на inverted видимо (0, 0, -1) ?
То было бы с нормальным UI. А с таким (надавать бы мокрым веником по жопе) приходится сначала нормировать (руками), а потом уж вводить. Поворот вокруг Z на 30 градусов (нормированный)
axis = (0, 0, 1) * sin(15). scalar = cos(15)
См аттач. Зеленая ось рез-та никаких ассоциаций у меня не вызывает. А вот цифирки интересные (и округлил, гад, до 2 знаков). Выходит первое умножение дает ось на 15 (т.е. вектор повернутый на половину угла ? Может так совпало (частный случай) ?
Записан
Inhibitor
Гость
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #9 :
Апрель 09, 2020, 11:24 »
Цитата: Igors от Апрель 08, 2020, 13:36
Можно это увидеть с помощью рекомендованной демонстрашки? Ну хотя бы кватернион после первого умножения? Потому что я, правду сказать, "ни асилил". Спасибо
Сорян, мопед не мой...
[offtop]
Читал что Гамильтон больше десяти лет бился прежде чем смог запилить кватернионы в их текущем виде
[/offtop]
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #10 :
Апрель 20, 2020, 11:25 »
Навалилась куча переделок, и времени совсем нет
Ну ладно, попробуем с др стороны. В изначальной нитке мелькнул интересный пост, вот он
Цитировать
Все намного проще.
Формула вращения вектора P вокруг произвольной оси A на угол theta:
P' = P*cos(theta) + (A x P)*sin(theta) + A(A * P)(1-cos(theta)) (I)
Пусть q - нормированный кватернион и равен s + v (s - скалярная часть, v - векторная).
Тогда обратный кватернион q^(-1) = s - v.
Если перемножить q * P * q^(-1), то получится
q * P * q^(-1) = (s^2 - v^2)P + 2sv x P + 2(v * P)v
Пусть v = tA, где A - единичный вектор
Перепишем все и получим:
q * P * q^(-1) = (s^2 - t^2)P + 2stA x P + 2t^2(A * P)v (II)
Можно увидеть сходства между формулой вращения (I) и формулой (II).
Из формулы (I) получим:
s^2 - t^2 = cos(theta)
2st = sin(theta)
2t^2 = 1 - cos(theta)
Из последнего равенства получаем:
t = sqrt((1- cos(theta)) / 2) = sin(theta/2)
Складывая 1-ой и 3-ее равенство получим:
s^2 + t^2 = 1, поэтому s = cos(theta/2).
В итоге кватернион будет иметь вид:
q = s + v = cos(theta/2) + A * sin(theta/2), где A - ось вращения (нормированная).
Ну идея понятна - доказать что кватернионные манипуляции сводятся к "заведомо правильной" формуле. Как бы "алгебраическое" доказательство. Это не совсем то что хочется, (нет представления как это происходит в пр-ве), но тоже интересно. Только вот что это за формула
Цитировать
Формула вращения вектора P вокруг произвольной оси A на угол theta:
P' = P*cos(theta) + (A x P)*sin(theta) + A(A * P)(1-cos(theta))
(I)
Откуда она взялась? Как ее вывести с нуля? И вообще: вот открыл "книгу" (правду сказать, никаких "книг" давно уже нет, есть ссылки), хотел "почитать", а тут такая бяка, хрен поймешь
. И шо делать? Заучить наизусть? (у меня никогда не выходило, память ниже средней). Пропустить? Ну так признаемся что наше "почитать" = дешевые понты. Хотелось бы, конечно, "разобраться", но как?
Что предложите ?
«
Последнее редактирование: Апрель 20, 2020, 11:29 от Igors
»
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #11 :
Апрель 20, 2020, 11:38 »
Простите а как это вы так лихо записываете кватернион как _сумму_ скаляра и вектора. Кто вообще сказал что так можно и кто сказал что на эту "сумму" распространяются алгебраические операции? От того что вы там написали плюсик не означает что для этой операции выполнены требования и равно что и формула раскрытия скобок работает.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #12 :
Апрель 20, 2020, 13:12 »
Цитата: Авварон от Апрель 20, 2020, 11:38
Простите а как это вы так лихо записываете кватернион как _сумму_ скаляра и вектора. Кто вообще сказал что так можно и кто сказал что на эту "сумму" распространяются алгебраические операции? От того что вы там написали плюсик не означает что для этой операции выполнены требования и равно что и формула раскрытия скобок работает.
Пришлось смотреть где ж я такое писал
Наверное имеется ввиду это
Цитата: Igors от Апрель 08, 2020, 09:27
Для умножения кватернионы представляются как
Цитировать
q.x * i + q.y * j + q.z * k + q.scalar
Да, официальная теория утверждает что кватернион - это комплексное число, только комплексных компонент 3 (i, j, k). Да, "сложения" одной компоненты с другой нет, т.е. в коде это ничем не выразится. А вот множить можно, по Гамильтону
i * j = k // подобно векторному произведению
j * k = i // каждая ось получается из 2 предыдущих
k * i = j // и произведение не коммутативно (j * i = -k)
// а произведение одной компоненты выпадает в скаляр
i * i = j * j = k * k = i * j * k = -1
Ну то ладно, пока предлагается разобраться в формуле поворота без всяких комплексных. Хотя бы вот этот фостик
Цитировать
... + A(A * P)(1-cos(theta))
Что сие значит
«
Последнее редактирование: Апрель 20, 2020, 13:13 от Igors
»
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #13 :
Апрель 20, 2020, 13:26 »
https://ru.wikipedia.org/wiki/
Формула_поворота_Родрига мы эту формулу обсуждали тут N лет назад
Цитировать
официальная теория утверждает что кватернион - это комплексное число
официальная теория не может так утверждать, потому что это не правда, строго говоря
кватернионы напоминают комплексные числа, но это не просто 2 дополнительных компоненты: кватернионы не образуют поле, в отличие от комплексных чисел.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Где же СУТЬ ? (изучение классики)
«
Ответ #14 :
Апрель 20, 2020, 14:18 »
Цитата: kambala от Апрель 20, 2020, 13:26
https://ru.wikipedia.org/wiki/
Формула_поворота_Родрига мы эту формулу обсуждали тут N лет назад
Ну хорошо, убедились что товарищ переписал правильно, формула наверное "та самая". Но как это приблизило нас к ее пониманию?
Вы "асилили" вывод из вики? Если да - поясните своими словами, спасибо. Если нет - стесняться нечего, тамошние выкладки просто ужасны (и у меня подозрение - умышленно)
Вопрос тот же
Цитата: Igors от Апрель 20, 2020, 13:12
Цитировать
... + A(A * P)(1-cos(theta))
Что сие значит
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...