![]() 12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат10.05.2018, 12:30. Показов 5929. Ответов 54
Метки нет Все метки)
(
Добрый день! Столкнулся с проблемой понимания применения алгебры кватернионов для решения одной небольшой задачи.
Пишу приложение на С++. Есть несколько связных объектов, каждый из которых имеет собственную систему координат. Координаты каждой из систем рассчитываются относительно глобального нуля. Одна из систем координат изначально "повернута" по оси Y относительно родительского объекта (и, соответственно, его системы коодинат) на константный угол. Необходимо пересчитать координаты точки, лежащей в этой "Повернутой" системе координат при вращении системы относительно оси X. При расчете координат точек внутри систем, перпендикулярных друг другу проблем не возникает: 1. формируется нужный кватернион поворота; 2. происходит локальный поворот точек внутри текущей СКО при помощи сформированного кватерниона; 3. происходит смещение этой СКО в систему ее "Родителя", применяется кватернион родителя и обратный перенос СКО на свое место в пространсве. При расчете же новых координат точек внутри "повернутой" системы координат результат не совпадает с результатами САПР, в котором выстроенна модель из моих связных объектов. Судя по координатам, выдаваемым САПР происходит поворот не только по нужной мне оси, но и еще по какой-то из оставшихся. Возможно я неправильно понимаю как нужно использовать алгебру кватернионов именно в моем случае? Заранее благодарен за Ваши подсказки и советы. К посту для наглядности прикладываю иллюстрацию связе объектов.
0
|
10.05.2018, 12:30 | |
Ответы с готовыми решениями:
54
Преобразование координат точки при повороте системы координат Относительно прямоугольной системы координат даны точки Найти координаты точки векторами базиса и началом системы координат |
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
|
|
10.05.2018, 18:26 | |
Например, всю жизнь пользуюсь простыми и понятными углами Эйлера. И ни разу со школы не возникало проблем. Вернее, возникали спотыкания, но только из-за больших перерывов в применении.
А все эти новые словечки от лукавого, потому что суть остаётся той же самой, что и была при дедушке Эйлере. Можно заподозрить, речь о манипуляторе, да?
0
|
![]() 12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
10.05.2018, 18:44 [ТС] | |
О нем самом)
Только он крепится к телу, у которого посадочная площадка под углом и находится. Я пользовался всем. Кватернионы в реализации для других узлов оказались проще и понятнее. Здесь же что матрицы поворота/перемешения, что кватернионы не дают верного результата. Что то делаю не так, а что понять вообще не могу. Устраняю поворот этот злосчастный - все работает путем и совпадают результаты.
0
|
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
|
|
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
|
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
|
|
10.05.2018, 19:14 | |
Не знаю, если начальные углы фиксированы и известны, то что ещё нужно?
Тут как-то советовал одному парню завести процедуру для конкретного устройства, чтобы эта процедура по известным изменениям управляющих параметров выдавала координаты любых точек. Могу повторить совет. Ещё могу попробовать ближе к конкретике, но только без специальных технических терминов. Просто рассматриваем отрезки, точки в пространстве…
0
|
![]() 12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
10.05.2018, 19:19 [ТС] | |
one man, я сейчас тоже самое делаю) цель - постоянно пересчитывать координаты. Но для этого надо программу научить...ей же что скажешь, то и сделает)
Поэтому буду только ЗА, если без конкретики, но наведете на верное решение задачи....у меня реальная проблема в понимании реализации при таких условиях...
0
|
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
|
|
10.05.2018, 20:01 | |
Вторая точка имеет известные координаты в новой системе или где-либо вообще к этому моменту? Тогда, зная углы изменения местной системы, мы пересчитываем её координаты из местных в глобальные. Формулы известны безо всяких кватернионов.
Добавлено через 16 минут Или, скорее всего, предполагаемые глобальные (без наклона всей системы), в реальные глобальные после наклона. Как угодно можно.
0
|
![]() 12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
11.05.2018, 07:12 [ТС] | |
Точка имеет известные координаты до поворота системы, в которой она располагается. Система, к которой она привязана уже осуществила свои перемещения. Т.е. нужно повернуть систему, в которой находится точка и получить новые координаты точки в глобальной системе координат.
А формулы - это перенос систем координат и матрицы вращения? Или я уже поплыл в мат. части?
0
|
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
|
|
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... рный_замок Предложены Уильямом Гамильтоном в 1843 году. https://ru.wikipedia.org/wiki/Кватернион Обычно рисуют кинематическую схему с шарнирами. Экспертам хватает и просто фото манипулятора. Тут хватит и GeoGebra, можно слайдерами крутить отрезки и т.п. Если нужны свистоперделки (красивый свет, сложное затенение 3д модели, загрузить 3д модель манипулятора) то тогда wolfram Mathematica. Последовательно повернуть отрезок N раз. Сложность 5 класс =).
0
|
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
|
||||||
11.05.2018, 19:36 | ||||||
DimKaKiber, yе знаю, надеюсь, поможет. Это основной текст программы (Maple), отвечающий за вращение и смещение
L[m][i] – одна из координат i-й точки ломаной, изображающей сердечко, gm – смещение по соответствующей координате. Элементы матрицы вращения и смещения меняют свои значения N раз по кругу. Здесь все точки одновременно получают одно и то же вращение и смещение. Поэтому мы видим движение всего рисунка. Раз он отображается на экране, значит, решена прямая задача – мы по углам поворота и смещению получаем координаты всех точек. Думаю, прямая задача манипулятора не сложнее задачи получения этого рисунка. https://www.cyberforum.ru/atta... 1526056446
0
|
![]() 12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
|
|
12.05.2018, 06:44 [ТС] | |
Да хоть палки, скрепленные чем то не совсем приличным))))) Так что сердечко это еще норм)))
Я тут понял, что как то неправильно владею матрицами поворота - сижу теперь от простого все начинаю) Как в школе, действительно)))
0
|
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
|
|
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)).
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть.
Дело в том, что я. . .
|
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
|
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
|
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
|
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
|
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
|
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
|
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
|
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
|
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
|