Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735

Поиск оси и угла поворота одной СК относительно другой

05.11.2021, 16:03. Показов 8913. Ответов 101

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Подскажите, пожалуйста, как можно (и можно ли, собственно) найти ось вращения и угол поворота одной трёхмерной системы координат, заданной трёмя единичными радиус-векторами https://www.cyberforum.ru/cgi-bin/latex.cgi?[X_1, Y_1, Z_1] относительно другой, заданной через https://www.cyberforum.ru/cgi-bin/latex.cgi?[X_2, Y_2, Z_2]?
Интернеты не дают прямого ответа на такой вопрос, да и о таких задачах в целом я раньше не слышал. Я понимаю, что имеет место задача, обратная задаче поворота СК матрицей поворота, однако шо-то до меня не дошло, как восстановить матрицу поворота из самого факта наличия поворота (да и углы Эйлера не вызывают у меня ничего, кроме "можно ненадо?", ввиду печального опыта взаимодействия с ними).
Памятуя о кватернионах, содержащих в себе ровно ту информацию, которую я и хочу получить, я начал копать в сторону получения кватерниона от заданных СК (используя первую, как базовую, а вторую - как результат поворота). Однако по неизвестным науке (и мне) причинам, никого (кроме меня, видимо, опять же) не интересует процесс, обратный получению нового вектора путём поворота исходного вокруг заданной оси на заданный угол, хотя казалось бы.
По большому счёту, как я считаю, мне нужна помощь только в построении кватерниона по векторам "было"/"стало", однако я могу ошибаться.
Буду очень благодарен за любую помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.11.2021, 16:03
Ответы с готовыми решениями:

Вычисление угла наклона одной прямой относительно другой
Как узнать угол наклона одной прямой относительно другой, если обе прямые заданы координатами двух точек?

Как указать диапазон поворота(угла) по оси?
При создании объекта хочу задать ему диапазон угла,на которые он может отклониться от начального свойства Rotation. Именно по одной оси Y....

Как рассчитать поворот угла, зная координаты трех точек до поворота и после поворота угла
Как рассчитать поворот угла (в градусах), зная только координаты трех точек до поворота и после поворота данного угла? Заранее спасибо.

101
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
05.11.2021, 19:41
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
Подскажите, пожалуйста, как можно (и можно ли, собственно) найти ось вращения и угол поворота одной трёхмерной системы координат, заданной трёмя единичными радиус-векторами https://www.cyberforum.ru/cgi-bin/latex.cgi[X_1, Y_1, Z_1] относительно другой, заданной через https://www.cyberforum.ru/cgi-bin/latex.cgi?[X_2, Y_2, Z_2]?
Возьмите векторное произведение векторов X1 X2 и получите ось.

Добавлено через 34 минуты
При необходимости сделаете поворот вокруг оси X до совпадения всех осей.
1
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
05.11.2021, 21:26  [ТС]
Цитата Сообщение от Nacuott Посмотреть сообщение
Возьмите векторное произведение векторов X1 X2 и получите ось.
А если поворот был вокруг X? Там же нулевой вектор получится, нет? Думается мне, что нужно коррелировать сразу три векторных произведения (возможно, векторно складывать результаты трёх векторных произведений по трём парам осей).
Цитата Сообщение от Nacuott Посмотреть сообщение
При необходимости сделаете поворот вокруг оси X до совпадения всех осей.
Не до конца Вас понял. Почему поворот вокруг X должен привести к совпадению всех осей? Мне это представляется чем-то невозможным.
Давайте я, наверное, проиллюстрирую задачу (возможно, я не так выразился ранее): на рисунке показана глобальная система отсчёта, относительно которой изменяется положения некоторой подвижной системы координат. Были зафиксированы координаты осей подвижной системы в два момента времени (t1 и t2). Необходимо найти ось и угол поворота при переходе подвижной СК из состояния 1 в состояние 2.


Цитата Сообщение от Nacuott Посмотреть сообщение
Возьмите векторное произведение векторов X1 X2 и получите ось.
Опять же, а если ось вращения расположена так, что ось X описывает собой конус? Тогда векторное произведение любого старого и нового положения оси X всегда будет давать неверное направление оси. Или я Вас неверно понял, и векторным произведением X1 и X2 мы получим X-координату оси вращения?
0
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
05.11.2021, 21:35
Ромуальд_7, Предложите конкретный пример, чтобы был конкретный разговор, иначе разговор не о чем.

Добавлено через 2 минуты
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
векторным произведением X1 и X2 мы получим X-координату оси вращения?
А Вы не знаете чем является результат векторного произведения двух векторов?
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
05.11.2021, 22:23  [ТС]
Цитата Сообщение от Nacuott Посмотреть сообщение
А Вы не знаете чем является результат векторного произведения двух векторов?
Тупой вопрос, согласен. Хотя я имел в виду X-составляющую результирующего вектора. Но ведь тогда не сходится. Не понимаю, чего я не понимаю.
Давайте на конкретном примере, хорошо:
Набор №1:
Ось X: [249.89518688, -132.30252945, 100.24188884]; Ось Y: [94.88779106, 262.51255126, 109.92482676]; Ось Z: [136.19362204, 59.85984574, -260.51505942].
Набор №2:
Ось X: [276.83371922, -42.87009907, 107.35570086]; Ось Y: [-20.6880732, 255.73631629, 155.47006194]; Ось Z: [113.73256143, 150.86779358, -233.0317861].
0
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
05.11.2021, 22:29
Ромуальд_7, и что Вы предлагаете - набирать мне одиннадцатизначные числа?
А по-проще числа нельзя было задать? И что это Вы, вообще, задали?.
Короче, я сам предложу пример.
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
05.11.2021, 23:16  [ТС]
Nacuott, не, ну, подождите — Вы предложили дать реальный пример, и вот он
Попроще это всё то, что с поворотом на стандартный углы, а в рамках моей задачи — это один случай на миллион. По большому счёту, я привёл значения с точностью до восьмого знака дабы избежать вопросов (если они возникнут) о неперпендикулярности осей; в целом, дробную часть можно ведь просто не учитывать
А значения эти задают направления осей (их единичные радиус-векторы) подвижной СК относительно неподвижной (глобальной): ось икс: координаты X, Y, Z в неподвижной СК, ось игрек: её координаты X, Y, Z в неподвижной СК, и так далее. Итого 18 значений (по 9 на одну СК).
ВОЗМОЖНО, люди задают оси подвижной СК как-то иначе, но я, пока что, видел такой, и только такой метод задания.
0
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,462
05.11.2021, 23:18
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
Подскажите, пожалуйста,
А, секретный работничек... Есть так называемая обратная задача кинематики манипулятора, там пытаются максимально простым путём найти значение управляющих параметров через текущее положение рабочей точки. Тоже через местные системы координат, через глобальные. Эта задача имеет бесконечное множество решений. Даже на плоскости угол между векторами можно представить двумя величинами, то есть мы попали в новое положение по часовой или против неё...
Надо бы всю задачу видеть, чтобы попытаться сообразить. Мне так кажется.
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
05.11.2021, 23:20  [ТС]
А, поправлюсь — длины единичных векторов увеличены в триста раз, поэтому они не единичные с точки зрения официальной терминологии, однако единичные по своей сути, просто масштаб увеличен в триста раз. Не подумал, что это может быть неудобно читать, честно говоря
0
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
05.11.2021, 23:27
Вот я задал систему двух реперов. См.картинку с числами. Каждый репер - это 4 точки т.е. 12 чисел.
По ним строятся реперы в начале глобальной системе координат и в этом начале поворачиваются.
А Вы по той системе чисел, что представили можете построить такую картинку?
Миниатюры
Поиск оси и угла поворота одной СК относительно другой  
1
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
05.11.2021, 23:34  [ТС]
one man, почему секретный?) Почему работничек?)) Без меня тут появилась какая-то локальная шутка?
Кроме того, к моей официальной работе задача отношения не имеет ну вообще никакого.
Итак)) Да — про кинематику манипуляторов нам немного рассказывали в институте, и про описываемые Вами трудности я наслышан, однако с задачей моей их связывает только раздел геометрии математической науки.
Вообще говоря, задача-то моя не видится чем-то сложным — по известным относительным координатам ориентации подвижной системы координат в различные моменты времени вычислять скорость вращения тела, к которому эта СК жёстко привязана. Вот прямо-таки ВСЯ задача умещается в это предложение.
По поводу плоского угла — да, поворотов два, однако аналитическая математика ведь всегда находит наименьший, так ведь? Это уже какой-то другой анализ призван определять, а куда, собственно, мы должны вертеться. Если учитывать, что от текущего до следующего положения тело никак не могло повернуться более, чем на, скажем 60°, то арккосинус косинуса угла поворота всегда будет давать корректный результат.
Как-то так)
0
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
06.11.2021, 00:12
Ромуальд_7, по своим данным постройте, пожалуйста, такую картинку как я и предъявите здесь.
Иначе все, что я буду делать - будет впустую.

Добавлено через 31 минуту
Ромуальд_7, где картинка? Иначе я продолжать не буду.
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
06.11.2021, 01:34  [ТС]
Цитата Сообщение от Nacuott Посмотреть сообщение
Каждый репер - это 4 точки т.е. 12 чисел
ИЛИ, в случае исследования ТОЛЬКО вращательного движения, 3 точки, то есть, 9 чисел, поскольку положение узла в глобальных координатах неважно вообще, что я и подразумевал.
Вот картинка, которая, anyway, не меняет для Вас ничего, согласитесь


Узлы разнесены мною в стороны для наглядности, однако по умолчанию оба их центра лежат в центре глобальной неподвижной СК (ибо а зачем им оттуда уходить при исследовании вращения).

Ну, и, как говорится, микропояснение (хотя казалось бы, что тут пояснять), поскольку я не понял, по какому принципу Вы закодировали координаты в матрице (что по колонкам, а что по столбцам - встречал я различные варианты).


В общем, очередное упоминание уважаемого сообщества о векторном произведении векторов привело к проведению мною ряда экспериментов, в результате которых решение нашлось. Я уже начинаю думать о том, что в любой непонятной ситуации нужно просто произнести "векторное произведение", и всё решится само (это уже четвёртый такой случай).
Итак, к сути. Решение.
Работаем с несмещённым от центра глобальной неподвижной системы координат (ГСК) узлом (узел - подвижная система координат) (а если узел смещён - просто вычитаем из всех координат координаты его центра, собственно (делаем несмещённым)), характеризующийся тремя тройками координат: координаты оси X в ГСК - радиус-вектор с координатами [Xx, Xy, Xz], координаты оси Y в ГСК - радиус-вектор с координатами [Yx, Yy, Yz], и Z - [Zx, Zy, Zz].
Берём два узла, угол между которыми нужно найти. Находим векторные произведения между тремя парами векторов - между X1 (первый узел) и X2 (второй узел), Y1 и Y2, Z1 и Z2. Складываем три получившихся вектора в один. Нормируем. Поздравляю - это ось вращения. Но это только 33,(3)% дела.
Далее в бой вступают кватернионы. Мы знаем, шо с помощью кватерниона можно повернуть вектор к его новому положению. Однако кватерниона у нас нет, но есть старое и новое положение узла, а после манипуляций из предыдущего абзаца есть и координаты оси вращения. Координаты оси вращения составляют 60% кватерниона, а оставшиеся 40% - величина угла поворота.
Кватернион закодирован следующим образом: https://www.cyberforum.ru/cgi-bin/latex.cgi?\Lambda = cos(\frac{\varphi}{2}) + \vec{n} sin(\frac{\varphi}{2}), где https://www.cyberforum.ru/cgi-bin/latex.cgi?\Lambda (лямбда) - греческая буква, которой принято обозначать кватернионы, https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi (фи) - угол конечного поворота, а https://www.cyberforum.ru/cgi-bin/latex.cgi?\vec{n} - вектор-строка (или столбец), содержащая координаты [x, y, z] нашей оси вращения. Как видно, для полноты картины не хватает только https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi.
Существует формула: https://www.cyberforum.ru/cgi-bin/latex.cgi?R' = \Lambda * R * \Lambda^{-1}, где https://www.cyberforum.ru/cgi-bin/latex.cgi?R - исходный вектор, подлежащий повороту (берём любую из осей первого узла, но в целях избежания ситуаций, когда угол оказывается нулевым, таковым не являясь априори (выбрали ось X, хотя вокруг неё узел и повернулся - ну, это нули по определению), лучше брать вектор, являющийся суммой как минимум двух осей узла - так исключений не будет), https://www.cyberforum.ru/cgi-bin/latex.cgi?R' - конечный вектор (после поворота; берётся тот же, что и для https://www.cyberforum.ru/cgi-bin/latex.cgi?R, но для второго узла), https://www.cyberforum.ru/cgi-bin/latex.cgi?\Lambda - кватернион, вместо https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi в котором выступает неизвестная, и https://www.cyberforum.ru/cgi-bin/latex.cgi?\Lambda^{-1} - т.н. обратный кватернион, образованный от "обычного", в котором вместо https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi выступает всё та же неизвестная.
По большому счёту, остаётся выполнить некоторые преобразования, которые я опущу, по приведению векторной формы записи всего этого дела в одно уравнение с одной неизвестной - https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi - найти которую уже можно любым удобным способом. Ведь что получается - в левой части уравнения стоит конечный вектор (который нам задан), а в правой части - исходный вектор (который также задан), умножающийся на вектор-строку с одной лишь неизвестной - почти чистой воды линейное уравнение (но будет ошибкой думать, что всё так просто).
В общем, алгоритм рабочий, но если есть предложения по оптимизации или даже замечания - я всегда открыт предложениям и конструктивно воспринимаю критику (адекватную, конечно же).
Хочу также поблагодарить всех, кто не оставался в стороне и помог мне допереть до приведённого выше решения!
0
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
06.11.2021, 11:41
Ромуальд_7, много букофф. Вы задали 2 репера. Вот найдите все что нужно пошагово с предъявлением.
И соместите эти два репера. С картинкой. А мы проверим.
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
06.11.2021, 14:06  [ТС]
Цитата Сообщение от Nacuott Посмотреть сообщение
много букофф
и
Цитата Сообщение от Nacuott Посмотреть сообщение
Вот найдите все что нужно пошагово
ну никак не стыкуется, не находите?
Я расписал процедуру пошагово, и получил "много букофф". Не знаю, какому поколению Вы принадлежите, но я абсолютно не ожидал подобной реакции на довольно неплохое (субъективно, но ещё никто не жаловался) описание.
Цитата Сообщение от Nacuott Посмотреть сообщение
И соместите эти два репера.
Что значит "совместить"?
Цитата Сообщение от Nacuott Посмотреть сообщение
С картинкой.
С Вашего самого первого запроса картинки у меня назревала буря - зочем? На кой ляд сдалась картинка, если математика останется математикой? Вам для нахождения скалярного произведения тоже требуется сначала картинку нарисовать? Я, конечно, тоже люблю иллюстрировать мат. расчёты, однако здесь это не нужно, и уж тем более на тех этапах, когда Вы этого потребовали. Для проверки корректности расчётов - да, для визуализации исходных данных - нет.
Цитата Сообщение от Nacuott Посмотреть сообщение
А мы проверим
Что проверите? Расчёты, которые я здесь выложу потому, что они сошлись и у меня? Прекрасная проверки получится
0
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
06.11.2021, 14:11
Ромуальд_7, у Вас не очень "перпендикулярны" заданные векторы.Скалярное произведение некоторых не ноль, а 0.01 что внесло погрешности при вычислении.При вычислении пришлось доворачивать вручную на 0,05 радиана в последней операции. А где ваши результаты пусть даже с погрешностями из-за нестрогой перпендикулярности заданных вами векторов?
Опять разговоры - где фактура? Оси , углы, наконец, совмещение реперов с указанием промежуточных результатов.
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
06.11.2021, 17:21  [ТС]
Цитата Сообщение от Nacuott Посмотреть сообщение
у Вас не очень "перпендикулярны" заданные векторы.
Ну, это заведомо неправда, поскольку координаты эти получены из SolidWorks'а путём построения трёх строго перпендикулярных друг другу векторов в трёх стандартных плоскостях. Все погрешности от одинарной точности, да и иначе быть не может.
Кроме того, по моему алгоритму отклонения между вычисляемой осью и истинной начинаются в седьмом знаке после запятой, так шо доворачивали Вы векторы явно не по моей вине, я думаю.
Цитата Сообщение от Nacuott Посмотреть сообщение
где ваши результаты
А мои и Ваши результаты по одним и тем же формулам будут чем-то отличаться?))
Чуть позже я приведу расчёты (когда с кватернионами доведу преобразования до конца), но, опять же, зачем - неясно.
0
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
06.11.2021, 19:19
Цитата Сообщение от Nacuott Посмотреть сообщение
у Вас не очень "перпендикулярны" заданные векторы.
Ну, это заведомо неправда, поскольку координаты эти получены из SolidWorks'а путём построения трёх строго перпендикулярных друг другу векторов в трёх стандартных плоскостях. Все погрешности от одинарной точности, да и иначе быть не может.
Кроме того, по моему алгоритму отклонения между вычисляемой осью и истинной начинаются в седьмом знаке после запятой, так шо доворачивали Вы векторы явно не по моей вине, я думаю.
А это что?
Миниатюры
Поиск оси и угла поворота одной СК относительно другой  
0
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,462
06.11.2021, 20:58
Виктор Афанасьевич, у пользователей САПРа совсем другие представления о реальности.
0
1836 / 1030 / 193
Регистрация: 24.02.2013
Сообщений: 3,105
Записей в блоге: 12
06.11.2021, 21:07
Цитата Сообщение от one man Посмотреть сообщение
Виктор Афанасьевич, у пользователей САПРа совсем другие представления о реальности.
Да,Алексей Борисович, ТС собирается зачем-то привлекать кватернионы. Здесь достаточно матрицы вращения вокруг произвольной оси, проходящей через начало координат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.11.2021, 21:07
Помогаю со студенческими работами здесь

Найти вектор по точке и углу поворота относительно оси Х
Здравствуйте. Не могу найти формулу, по которой бы можно было получить вектор v(a,b), зная точку на плоскости и угол поворота...

Записать матрицу в другой файл в зеркальном отражении относительно вертикальной оси
помогите решить задачи на завтрашний экзамен не могу получить допуск, вылетаю со стипендии точнее, коды есть, но ничего не работает ...

Найти момент инерции однородного отрезка относительно оси, лежащей с ним в одной плоскости
Найти момент инерции однородного отрезка AB длиной 9 ед. дл. относительно оси, лежащей с ним в одной плоскости, если конец А отстоит от оси...

Вращение одной точки относительно другой
Правильно ли я понимаю, что сначала надо вращать точку A вокруг B так как будто B - начало координат, затем - переместить полученную точку...

Угол одной позиции относительно другой
Всем доброго дня. Ни как не могу сообразить: даны два Vector2, нужно найти угол первой позиции (в градусах) относительно второй позиции: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru