|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат10.05.2018, 12:30. Показов 6711. Ответов 54
Метки нет (Все метки)
Добрый день! Столкнулся с проблемой понимания применения алгебры кватернионов для решения одной небольшой задачи.
Пишу приложение на С++. Есть несколько связных объектов, каждый из которых имеет собственную систему координат. Координаты каждой из систем рассчитываются относительно глобального нуля. Одна из систем координат изначально "повернута" по оси Y относительно родительского объекта (и, соответственно, его системы коодинат) на константный угол. Необходимо пересчитать координаты точки, лежащей в этой "Повернутой" системе координат при вращении системы относительно оси X. При расчете координат точек внутри систем, перпендикулярных друг другу проблем не возникает: 1. формируется нужный кватернион поворота; 2. происходит локальный поворот точек внутри текущей СКО при помощи сформированного кватерниона; 3. происходит смещение этой СКО в систему ее "Родителя", применяется кватернион родителя и обратный перенос СКО на свое место в пространсве. При расчете же новых координат точек внутри "повернутой" системы координат результат не совпадает с результатами САПР, в котором выстроенна модель из моих связных объектов. Судя по координатам, выдаваемым САПР происходит поворот не только по нужной мне оси, но и еще по какой-то из оставшихся. Возможно я неправильно понимаю как нужно использовать алгебру кватернионов именно в моем случае? Заранее благодарен за Ваши подсказки и советы. К посту для наглядности прикладываю иллюстрацию связе объектов.
0
|
|
| 10.05.2018, 12:30 | |
|
Ответы с готовыми решениями:
54
Преобразование координат точки при повороте системы координат Относительно прямоугольной системы координат даны точки Найти координаты точки векторами базиса и началом системы координат |
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
|
| 10.05.2018, 18:26 | |
|
Например, всю жизнь пользуюсь простыми и понятными углами Эйлера. И ни разу со школы не возникало проблем. Вернее, возникали спотыкания, но только из-за больших перерывов в применении.
А все эти новые словечки от лукавого, потому что суть остаётся той же самой, что и была при дедушке Эйлере. Можно заподозрить, речь о манипуляторе, да?
0
|
|
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
| 10.05.2018, 18:44 [ТС] | |
|
О нем самом)
Только он крепится к телу, у которого посадочная площадка под углом и находится. Я пользовался всем. Кватернионы в реализации для других узлов оказались проще и понятнее. Здесь же что матрицы поворота/перемешения, что кватернионы не дают верного результата. Что то делаю не так, а что понять вообще не могу. Устраняю поворот этот злосчастный - все работает путем и совпадают результаты.
0
|
|
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
|
| 10.05.2018, 18:56 | |
|
Ну, наклонилось тело, повернулось, сместилось … к телу привязана система координат – то же самое произошло с ней. Координаты второй точки первого звена, если они первые по очереди, вычисляются автоматически. И далее все остальные.
Это же прямая задача?
0
|
|
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
| 10.05.2018, 19:01 [ТС] | |
|
one man, да, прямая.С обратной проще....получил координаты, углы рассчитал
![]() Только начальные координаты точки уже сразу под этим углом крепления у меня. Других не дано. В мурзилках таких случаев не встретил - сплошные Пумы, да стендфорский манипулятор. Решение простым должно быть и на поверхности где то( Хочу попробовать завтра (сейчас нет лоступа к коду) вот такое решение https://www.cyberforum.ru/post10744507.html только пока не определился какие координаты в качестве А и В использовать для крайнего узла.
0
|
|
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
|
| 10.05.2018, 19:14 | |
|
Не знаю, если начальные углы фиксированы и известны, то что ещё нужно?
Тут как-то советовал одному парню завести процедуру для конкретного устройства, чтобы эта процедура по известным изменениям управляющих параметров выдавала координаты любых точек. Могу повторить совет. Ещё могу попробовать ближе к конкретике, но только без специальных технических терминов. Просто рассматриваем отрезки, точки в пространстве…
0
|
|
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
| 10.05.2018, 19:19 [ТС] | |
|
one man, я сейчас тоже самое делаю) цель - постоянно пересчитывать координаты. Но для этого надо программу научить...ей же что скажешь, то и сделает)
Поэтому буду только ЗА, если без конкретики, но наведете на верное решение задачи....у меня реальная проблема в понимании реализации при таких условиях...
0
|
|
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
|
| 10.05.2018, 19:25 | |
|
Первая точка отвечает шаровому креплению? Она смещена? С ней всё ясно?
Вторая точка на конце звена? Начинаем с неё?
0
|
|
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
| 10.05.2018, 19:30 [ТС] | |
|
Вроде да...
0
|
|
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
|
| 10.05.2018, 20:01 | |
|
Вторая точка имеет известные координаты в новой системе или где-либо вообще к этому моменту? Тогда, зная углы изменения местной системы, мы пересчитываем её координаты из местных в глобальные. Формулы известны безо всяких кватернионов.
Добавлено через 16 минут Или, скорее всего, предполагаемые глобальные (без наклона всей системы), в реальные глобальные после наклона. Как угодно можно.
0
|
|
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
| 11.05.2018, 07:12 [ТС] | |
|
Точка имеет известные координаты до поворота системы, в которой она располагается. Система, к которой она привязана уже осуществила свои перемещения. Т.е. нужно повернуть систему, в которой находится точка и получить новые координаты точки в глобальной системе координат.
А формулы - это перенос систем координат и матрицы вращения? Или я уже поплыл в мат. части?
0
|
|
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
|
| 11.05.2018, 11:02 | |
|
Конечно, всё так. Тут только можно напутать с правильным переписыванием-записыванием формул, как мне кажется, но это чисто технический вопрос. Я бы порекомендовал немного потренироваться на простых примерах с точками и с формулами, и чтобы под руной всегда был графический интерфейс для быстрого контроля. Короче, какой-нибудь матпакет, вернее, лучше мощный матпакет. Языки более низкого уровня не для этих задач – только тратить силы и время.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||||||
| 11.05.2018, 15:48 | |||||||
|
Есть простая и понятная “Матрица поворота вокруг произвольной оси” https://ru.wikipedia.org/wiki/Матрица_поворота Направление поворота там вроде всегда против часовой. Находите матрицу. Множите вектор на матрицу и получаете повернутый вектор. Можно крутить что угодно и как угодно. http://www.wikiznanie.ru/wikip... рный_замок https://ru.wikipedia.org/wiki/Кватернион
0
|
|||||||
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
||||||
| 11.05.2018, 19:36 | ||||||
|
DimKaKiber, yе знаю, надеюсь, поможет. Это основной текст программы (Maple), отвечающий за вращение и смещение
L[m][i] – одна из координат i-й точки ломаной, изображающей сердечко, gm – смещение по соответствующей координате. Элементы матрицы вращения и смещения меняют свои значения N раз по кругу. Здесь все точки одновременно получают одно и то же вращение и смещение. Поэтому мы видим движение всего рисунка. Раз он отображается на экране, значит, решена прямая задача – мы по углам поворота и смещению получаем координаты всех точек. Думаю, прямая задача манипулятора не сложнее задачи получения этого рисунка. https://www.cyberforum.ru/atta... 1526056446
0
|
||||||
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
|
| 11.05.2018, 20:01 | |
|
Не совсем удачно выбрал букву для m[к, n], пусть будет m[j, n], где j,n от 0 до 2.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 11.05.2018, 20:07 | |
|
Вот это троллинг
.То чувство когда думаешь что будет в мат пакете что-то такое А тебе показывает сердечко
0
|
|
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
| 12.05.2018, 06:44 [ТС] | |
|
Да хоть палки, скрепленные чем то не совсем приличным))))) Так что сердечко это еще норм)))
Я тут понял, что как то неправильно владею матрицами поворота - сижу теперь от простого все начинаю) Как в школе, действительно)))
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 12.05.2018, 07:47 | |
|
Почему не взяли готовые функций которые крутят вектора?
Берите матрицу поворота вокруг произвольной оси, она интуитивно понятна, 90% матрицы одно и тоже. Ось она же по аналогии с валом...очень толково.
0
|
|
|
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
|
|
| 12.05.2018, 09:07 | |
|
DimKaKiber, специально в коде соединил строки 3,4,5. Они по очереди соответствуют новым координатам x,y,z текущей точки i с координатами L[1][i], L[2][i], L[3][i]. Просто под рукой другого текста не было, а суть та же самая, только в звене расстояние постоянное, а здесь расстояния g переменные (под рисунок). А при постоянной длине каждая g равна соответствующей проекции этой длины звена.
http://vmk.ugatu.ac.ru/labkg51.htm
0
|
|
|
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
| 12.05.2018, 17:48 [ТС] | |
|
Excalibur921, К сожалению опыт работы с уже готовыми функциями и библиотеками у меня печальный - сколько раз не брался - получается совсем нето, что задумываешь. Поэтому всегда стараюсь понять как оно работает и что должно делать для решения именно моей задачи. + В последнее время ставятся такие задачи, для которых важна именно производительность на самом слабом железе (контроллер, смартфон, ПК). Поэтому всегда нужно знать как исправить внутренность функций для оптимизации и ускорения алгоритмов, которые мне же самому и приходится придумывать, обсчитывать и тестировать. Конкретно здесь - стоит задача обсчета прямой кинематики механизма, решение которой должно осуществляться в срок не более 0.5-1 миллисекунды в потоковом режиме для механизма имеющего в своем составе 59 взаимоувязанных узлов + их ориентация в пространстве (крен, тангаж, рысканье).
Недавно сделал такую схему + обратную для механизма с чуть меньшим количеством узлов с применением как раз алгебры кватернионов, что устроило по результатам (погрешность на уровне накопления ошибки для вычислений чисел типа float в микрометрах) и по быстродействию (от 0 до 1 миллисекунды, если замерять в целых числах по тикам процессора). И поэтому вызвало недоумение невозможность получения новых координат теми же способами для манипуляторов нового механизма. one man, Спасибо большое! Буду разбираться. День просто суматошный выдался - часто в разъездах приходится бывать. Задачка то, действительно, школьного уровня, но зараза, пока понимание не прийдет - до конца не решится. Добавлено через 1 час 56 минут Неправильно домножал координаты на матрицу поворота как оказалось.....Надо было матрицу на вктор-столбец, а я наоборот фигачил.......Это к вопросы про обычные матрицы и единичный поворот вектора ![]() А матрицу поворота вокруг произвольной оси таким же макаром задавать? Или ее надо сначала на направляющий вектор домножить, а потом на вектор, координаты которого пересчитываю? Как в ней ось поворота задается? ![]() Ага, разобрался....Те же яйца, только в профиль. Просто матрицу надо составлять с использованием значений единичного вектора, который направление определяет.
0
|
|
| 12.05.2018, 17:48 | |
|
Помогаю со студенческими работами здесь
20
Квартернионы. Расчет координат вектора при смещении одного узла относительно другого Расчет координат точки при смещении узла Определите координаты точки, полученной поворотом вокруг точки в системе координат Ввести координаты точки М и найти ее расстояние от начала координат (радиус - вектор от точки О (0,0)).
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|