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

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

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

Студворк — интернет-сервис помощи студентам
Добрый день! Столкнулся с проблемой понимания применения алгебры кватернионов для решения одной небольшой задачи.
Пишу приложение на С++. Есть несколько связных объектов, каждый из которых имеет собственную систему координат. Координаты каждой из систем рассчитываются относительно глобального нуля.
Одна из систем координат изначально "повернута" по оси 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
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
10.05.2018, 18:26
Например, всю жизнь пользуюсь простыми и понятными углами Эйлера. И ни разу со школы не возникало проблем. Вернее, возникали спотыкания, но только из-за больших перерывов в применении.
А все эти новые словечки от лукавого, потому что суть остаётся той же самой, что и была при дедушке Эйлере.
Можно заподозрить, речь о манипуляторе, да?
0
 Аватар для DimKaKiber
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
 Аватар для DimKaKiber
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
 Аватар для DimKaKiber
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
 Аватар для DimKaKiber
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
 Аватар для DimKaKiber
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
Цитата Сообщение от 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
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
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
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
 Аватар для 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
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
 Аватар для 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
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через 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. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru