Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167

Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат

10.05.2018, 12:30. Показов 5929. Ответов 54
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Столкнулся с проблемой понимания применения алгебры кватернионов для решения одной небольшой задачи.
Пишу приложение на С++. Есть несколько связных объектов, каждый из которых имеет собственную систему координат. Координаты каждой из систем рассчитываются относительно глобального нуля.
Одна из систем координат изначально "повернута" по оси Y относительно родительского объекта (и, соответственно, его системы коодинат) на константный угол. Необходимо пересчитать координаты точки, лежащей в этой "Повернутой" системе координат при вращении системы относительно оси X.

При расчете координат точек внутри систем, перпендикулярных друг другу проблем не возникает:
1. формируется нужный кватернион поворота;
2. происходит локальный поворот точек внутри текущей СКО при помощи сформированного кватерниона;
3. происходит смещение этой СКО в систему ее "Родителя", применяется кватернион родителя и обратный перенос СКО на свое место в пространсве.

При расчете же новых координат точек внутри "повернутой" системы координат результат не совпадает с результатами САПР, в котором выстроенна модель из моих связных объектов. Судя по координатам, выдаваемым САПР происходит поворот не только по нужной мне оси, но и еще по какой-то из оставшихся.

Возможно я неправильно понимаю как нужно использовать алгебру кватернионов именно в моем случае?
Заранее благодарен за Ваши подсказки и советы.

К посту для наглядности прикладываю иллюстрацию связе объектов.
Миниатюры
Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2018, 12:30
Ответы с готовыми решениями:

Преобразование координат точки при повороте системы координат
Здравствуйте! Не могу понять, из чего получается формула преобразования координат точки при повороте системы координат. Формула: x'=x...

Относительно прямоугольной системы координат даны точки
Относительно прямоугольной системы координат даны точки A(\sqrt{8}; -\frac{1}{\sqrt{2}}) и M(x, y). Найти координаты тех же точек в...

Найти координаты точки векторами базиса и началом системы координат
Не знаю как найти координаты точки Д. Вроде как вектора вывел но коряво. Дайти толчок плиз. С чего начать?

54
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
10.05.2018, 18:26
Например, всю жизнь пользуюсь простыми и понятными углами Эйлера. И ни разу со школы не возникало проблем. Вернее, возникали спотыкания, но только из-за больших перерывов в применении.
А все эти новые словечки от лукавого, потому что суть остаётся той же самой, что и была при дедушке Эйлере.
Можно заподозрить, речь о манипуляторе, да?
0
 Аватар для DimKaKiber
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
 Аватар для DimKaKiber
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
 Аватар для DimKaKiber
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, 19:25
Первая точка отвечает шаровому креплению? Она смещена? С ней всё ясно?
Вторая точка на конце звена? Начинаем с неё?
0
 Аватар для DimKaKiber
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
10.05.2018, 19:30  [ТС]
Вроде да...
0
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
10.05.2018, 20:01
Вторая точка имеет известные координаты в новой системе или где-либо вообще к этому моменту? Тогда, зная углы изменения местной системы, мы пересчитываем её координаты из местных в глобальные. Формулы известны безо всяких кватернионов.

Добавлено через 16 минут
Или, скорее всего, предполагаемые глобальные (без наклона всей системы), в реальные глобальные после наклона. Как угодно можно.
0
 Аватар для DimKaKiber
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
Цитата Сообщение от DimKaKiber Посмотреть сообщение
как нужно использовать алгебру кватернионов
Предлагаю на нее забить т.к. она мутновата для смертных =). Она вроде используется для ускорения математики где очень важна скорость расчета железом.

Есть простая и понятная “Матрица поворота вокруг произвольной оси”
https://ru.wikipedia.org/wiki/Матрица_поворота
Направление поворота там вроде всегда против часовой. Находите матрицу. Множите вектор на матрицу и получаете повернутый вектор. Можно крутить что угодно и как угодно.
Цитата Сообщение от one man Посмотреть сообщение
И ни разу со школы не возникало проблем
Может просто сложность проблем школьная?
http://www.wikiznanie.ru/wikip... рный_замок

Цитата Сообщение от one man Посмотреть сообщение
все эти новые словечки от лукавого,
Предложены Уильямом Гамильтоном в 1843 году.
https://ru.wikipedia.org/wiki/Кватернион

Цитата Сообщение от DimKaKiber Посмотреть сообщение
для наглядности прикладываю иллюстрацию связе объектов.
Обычно рисуют кинематическую схему с шарнирами. Экспертам хватает и просто фото манипулятора.
Цитата Сообщение от one man Посмотреть сообщение
Короче, какой-нибудь матпакет, вернее, лучше мощный матпакет.
Тут хватит и GeoGebra, можно слайдерами крутить отрезки и т.п. Если нужны свистоперделки (красивый свет, сложное затенение 3д модели, загрузить 3д модель манипулятора) то тогда wolfram Mathematica.

Цитата Сообщение от DimKaKiber Посмотреть сообщение
Система, к которой она привязана уже осуществила свои перемещения.
Последовательно повернуть отрезок N раз. Сложность 5 класс =).
0
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
11.05.2018, 19:36
DimKaKiber, yе знаю, надеюсь, поможет. Это основной текст программы (Maple), отвечающий за вращение и смещение
Matlab M Скопировано
1
2
3
4
5
6
7
FACE1 := seq(plottools[polygon]([seq([
 
m[1, 0]*L[1][i]+m[1, 1]*L[2][i]+m[1, 2]*L[3][i]+g1, 
m[2, 0]*L[1][i]+m[2, 1]*L[2][i]+m[2, 2]*L[3][i]+g2,
m[0, 0]*L[1][i]+m[0, 1]*L[2][i]+m[0, 2]*L[3][i]+g3
 
], i = 1 .. mm)], color = red, transparency = .5, style = patchnogrid), k = 1 .. N);
m[к, n] – элемент обычной матрицы поворота, например, из Википедии,
L[m][i] – одна из координат i-й точки ломаной, изображающей сердечко,
gm – смещение по соответствующей координате.
Элементы матрицы вращения и смещения меняют свои значения N раз по кругу.
Здесь все точки одновременно получают одно и то же вращение и смещение. Поэтому мы видим движение всего рисунка. Раз он отображается на экране, значит, решена прямая задача – мы по углам поворота и смещению получаем координаты всех точек.
Думаю, прямая задача манипулятора не сложнее задачи получения этого рисунка.
https://www.cyberforum.ru/atta... 1526056446
Миниатюры
Кватернион: расчет новой координаты точки при повороте ее СКО относительно предыдущей системы координат  
0
290 / 344 / 62
Регистрация: 09.06.2015
Сообщений: 1,340
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
 Аватар для DimKaKiber
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
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
 Аватар для DimKaKiber
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2018, 17:48
Помогаю со студенческими работами здесь

Квартернионы. Расчет координат вектора при смещении одного узла относительно другого
Добрый день! Помогите, пожалуйста, решить задачу. Есть три связанных между собой узла. Один узел неподвижен (Узел 1). На нем...

Расчет координат точки при смещении узла
Добрый день! Хотелось бы посоветоваться о решении новой для меня задачи. У меня имеется механизм, состоящий из 6 узлов, связанных...

Определите координаты точки, полученной поворотом вокруг точки в системе координат
В системе координат XOY задана точка A (25, 45). Определите координаты точки B, полученной поворотом вокруг точки с координатами (15, 15)...

Ввести координаты точки М и найти ее расстояние от начала координат (радиус - вектор от точки О (0,0)).
Ввести координаты точки М и найти ее расстояние от начала координат (радиус - вектор от точки О (0,0)).

Даны координаты концов N - мерного отрезка (точки a и b). Найти его длину и наибольшую из координат точки а
Пропустил пары и теперь не знаю, как составить программу:boredom:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Работа с объемным 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
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер