Поворот системи координат допоможіть вирішити

Добрий день. Постало завдання повороту системи координат по осях. Очевидно, що потрібно використовувати матриці повороту, послідовно перемноживши їх по кожній з осей, тільки от ніяк це у мене не виходить. З початкових даних є координати (Х, Y, Z) пунктів в істинної (початкової) системі координат і координати тих же пунктів, але вже в умовній системі координат. Завдання полягає в тому, щоб перевести координати пунктів з умовної системи координат в справжню.

Алгоритм мого рішення наступний:

1) У зв'язку з тим, що орієнтування осей в просторі у мене трохи відрізняється від стандартного (див. Зображення), то мені необхідно отзеркалить щодо площині ZoX

Через дзеркального відображення кути обертання навколо осей поміняють свої напрямки на протилежні.

2) Вираховую збільшення координат в кожній з СК, направляючі кути. Їх різниця дає нам кути, на які необхідно довернуть умовну СК.

3) Повороти навколо осей проводжу в наступному порядку: X-Y-Z.

Матриці повороту в моєму випадку повинні виглядати наступним чином:

4) Після обчислення кінцевої матриці повороту, я множу її на вектор збільшень координат і підсумовують з координатами початкового пункту:

Отримані координати ніяк не хочуть сходитися (точність повинна складати близько 0.5 см, але вони навіть близько не схожі), що я роблю не так?

Поворот системи координат допоможіть вирішити

А вам взагалі що відомо про ці точки? Чи вказане, яка точка в яку переводиться - або просто є багато точок до повороту і багато точок після, а як саме вони пов'язані, інформації немає? Це дві зовсім різні завдання, і друга набагато складніше, як на мене.

Відомі тільки просторові координати точок і вказано, яка в яку переводиться.

Виберіть будь-які три з них не лежать в одній площині. Як буде виглядати матриця, яка відображає три орта в ці три пункти в першій системі координат?

Відмінно. Перший крок зроблено. Другий: обчисліть матрицю яка переведе три пункти в першій системі координат в три орта.

Можливо, ви мали на увазі матрицю для тих же пунктів, але вже в другій СК?

Ну якщо є вектори "до" і "після", то тут взагалі робити нічого. Способів повно різних. Я б пішов якось так:
1. Взяв будь-який вектор, знайшов векторний добуток між ним "до" і ним же "після". Це буде наша вісь. Навколо цієї осі повертаємо, щоб вектор привести в нове положення.
2. Тепер кидаємо ту вісь, і навколо самого цього вектора (щоб його не збити - він вже стоїть як треба) повертаємо, щоб привести все інше в нове положення. Кут знаходимо по якомусь іншому вектору.

1. Не зовсім ясно, звідки взяти кут повороту навколо осі. Ми повинні повернути по осях Х і У, щоб поєднати Z?

2. І тут нам відповідно для кожної осі свій кут шукати, хіба ні?

"Напрямні кути" не мають нічого спільного з послідовними поворотами. Вам потрібно взяти єдиний поворот, але навколо осі, заданої вектором.

Нехай вісь обертання задана одиничним вектором а кут повороту
Тоді матриця повороту в декартових координатах має вигляд:

Ну якщо є вектори "до" і "після", то тут взагалі робити нічого. Способів повно різних. Я б пішов якось так:
1. Взяв будь-який вектор, знайшов векторний добуток між ним "до" і ним же "після". Це буде наша вісь. Навколо цієї осі повертаємо, щоб вектор привести в нове положення.
2. Тепер кидаємо ту вісь, і навколо самого цього вектора (щоб його не збити - він вже стоїть як треба) повертаємо, щоб привести все інше в нове положення. Кут знаходимо по якомусь іншому вектору.

1. Не зовсім ясно, звідки взяти кут повороту навколо осі. Ми повинні повернути по осях Х і У, щоб поєднати Z?

2. І тут нам відповідно для кожної осі свій кут шукати, хіба ні?


Не треба повертати навколо ніякого X. Не треба повертати навколо ніякого Y. Не треба поєднувати ніякої Z. Треба повернути навколо осі, знайденої так, як я сказав. Взагалі кажучи, це не X і не Y. Матрицю повороту навколо довільної осі на довільний кут - дивіться вище. Кут - це кут між векторами "до" і "після". Знайти його можна через скалярний добуток.
Для другої осі, так, кут буде свій і шукати його треба по-своєму.

-- менше хвилини тому -

Моє рішення - компроміс між Вашим (три повороти, але не працює) і тим, що пропонує Munin (один поворот, але його складно шукати).

Схожі статті