2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Поворот системы координат.
Сообщение14.12.2015, 06:34 


14/12/15
7
Здравствуйте. Встала задача поворота системы координат по осям. Очевидно, что нужно использовать матрицы поворота, последовательно перемножив их по каждой из осей, только вот никак это у меня не получается. Из начальных данных имеются координаты ( Х, Y, Z ) пунктов в истинной ( начальной ) системе координат и координаты тех же пунктов, но уже в условной системе координат. Задача состоит в том, чтобы перевести координаты пунктов из условной системы координат в истинную.

Алгоритм моего решения следующий:

1) В связи с тем, что ориентирование осей в пространстве у меня немного отличается от стандартного ( см. изображение ), то мне необходимо отзеркалить относительно плоскости ZoX

Из-за зеркального отражения углы вращения вокруг осей поменяют свои направления на противоположные.

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

3) Повороты вокруг осей провожу в следующем порядке: X-Y-Z.

Матрицы поворота в моем случае должны выглядеть следующим образом:

S(x) $
\left( \begin{array}{ccc} 1 & 0 & 0 \\
0 & \cos\alpha & \sin\alpha \\
0 & -\sin\alpha & \cos\alpha \\
 \end{array} \right)$

S(y) $
\left( \begin{array}{ccc} \cos\beta & 0 & -\sin\beta \\
0 & 1 & 0 \\
\sin\beta & 0 & \cos\beta \\
 \end{array} \right)$

S(z) $
\left( \begin{array}{ccc} \cos\gamma & \sin\gamma & 0 \\
-\sin\gamma & \cos\gamma & 0 \\
0 & 0 & 1 \\
 \end{array} \right)$

4) После вычисления конечной матрицы поворота $ S = S(x)S(y)S(z) $, я умножаю ее на вектор приращений координат и суммирую с координатами начального пункта:

$ 
\left( \begin{array}{c} X \\
Y \\
Z \\
 \end{array} \right)$ $ = $ $ S $ $ \left( \begin{array}{c} \Delta X \\
\Delta Y \\
\Delta Z \\
 \end{array} \right)$ $ + $ $ \left( \begin{array}{c} x_{0} \\
y_{0} \\
z_{0} \\
 \end{array} \right)$

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

Изображение

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение14.12.2015, 15:24 
Заслуженный участник
Аватара пользователя


30/01/06
72407
"Направляющие углы" не имеют ничего общего с последовательными поворотами. Вам нужно взять единственный поворот, но вокруг оси, заданной вектором.

-- 14.12.2015 15:31:37 --

Вот нужная матрица из Википедии:
https://ru.wikipedia.org/wiki/Матрица_поворота#Матрица_поворота_вокруг_произвольной_оси
    Цитата:
    Пусть ось вращения задана единичным вектором ${\hat {\mathbf {v} }}=(x,y,z),$ а угол поворота $\theta.$
    Тогда матрица поворота в декартовых координатах имеет вид:
    $$M({\hat {\mathbf {v} }},\theta )={\begin{pmatrix}\cos \theta +(1-\cos \theta )x^{2}&(1-\cos \theta )xy-(\sin \theta )z&(1-\cos \theta )xz+(\sin \theta )y\\(1-\cos \theta )yx+(\sin \theta )z&\cos \theta +(1-\cos \theta )y^{2}&(1-\cos \theta )yz-(\sin \theta )x\\(1-\cos \theta )zx-(\sin \theta )y&(1-\cos \theta )zy+(\sin \theta )x&\cos \theta +(1-\cos \theta )z^{2}\end{pmatrix}}$$

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение14.12.2015, 23:34 


14/12/15
7
Тогда я не особо понимаю, как в моем случае будет вычисляться угол поворота.

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 00:47 
Заслуженный участник


26/05/14
981
Сколько у вас пунктов? Если есть хотя бы три не в одной плоскости, то можно вычислить матрицу поворота без тригонометрии.

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 01:28 


14/12/15
7
Конкретно в данном случае 13, но нужно будет уточнить, сколько минимум пунктов планируется создавать вообще. Мне бы идеально подошел способ, позволяющий перевести координаты из условной СК в истинную при любом количестве пунктов, хотя я и с удовольствием рассмотрю любые другие.

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 08:37 
Заслуженный участник


26/05/14
981
Выберите любые три из них не лежащие в одной плоскости. Как будет выглядеть матрица, которая отображает три орта в эти три пункта в первой системе координат?

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 08:47 
Аватара пользователя


11/08/11
1135
А вам вообще что известно про эти точки? Указано ли, какая точка в какую переводится - или просто есть много точек до поворота и много точек после, а как именно они связаны, информации нет? Это две совсем разные задачи, и вторая гораздо сложнее, как по мне.

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 10:44 


14/12/15
7
INGELRII в сообщении #1082271 писал(а):
А вам вообще что известно про эти точки? Указано ли, какая точка в какую переводится - или просто есть много точек до поворота и много точек после, а как именно они связаны, информации нет? Это две совсем разные задачи, и вторая гораздо сложнее, как по мне.


Известны только пространственные координаты точек и указано, какая в какую переводится.

Цитата:
Выберите любые три из них не лежащие в одной плоскости. Как будет выглядеть матрица, которая отображает три орта в эти три пункта в первой системе координат?


$
\left( \begin{array}{ccc} -0.446317 & \ \  0,894874 & \ \ 0,000992 
\end{array} \right)$

$
\left( \begin{array}{ccc} \ \ 0.493118 & -0.869236 & -0.035527 
\end{array} \right)$

$
\left( \begin{array}{ccc} -0.443711 & -0.896168 & -0.001916
\end{array} \right)$

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 13:38 
Заслуженный участник


26/05/14
981
Отлично. Первый шаг сделан. Второй: вычислите матрицу которая переведёт три пункта в первой системе координат в три орта.

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 14:16 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
Ну если есть векторы "до" и "после", то тут вообще делать нечего. Способов полно разных. Я бы пошёл как-то так:
1. Взял любой вектор, нашёл векторное произведение между ним "до" и им же "после". Это будет наша ось. Вокруг этой оси поворачиваем, чтобы вектор привести в новое положение.
2. Теперь бросаем ту ось, и вокруг самого этого вектора (чтобы его не сбить - он уже стоит как надо) поворачиваем, чтобы привести всё остальное в новое положение. Угол находим по какому-нибудь другому вектору.

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение16.12.2015, 14:44 


14/12/15
7
slavav в сообщении #1082322 писал(а):
Отлично. Первый шаг сделан. Второй: вычислите матрицу которая переведёт три пункта в первой системе координат в три орта.


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

ИСН в сообщении #1082329 писал(а):
Ну если есть векторы "до" и "после", то тут вообще делать нечего. Способов полно разных. Я бы пошёл как-то так:
1. Взял любой вектор, нашёл векторное произведение между ним "до" и им же "после". Это будет наша ось. Вокруг этой оси поворачиваем, чтобы вектор привести в новое положение.
2. Теперь бросаем ту ось, и вокруг самого этого вектора (чтобы его не сбить - он уже стоит как надо) поворачиваем, чтобы привести всё остальное в новое положение. Угол находим по какому-нибудь другому вектору.


1.: Не совсем ясно, откуда взять угол поворота вокруг оси. Мы должны повернуть по осям Х и У, чтобы совместить Z?

2.: И тут нам соответственно для каждой оси свой угол искать, разве нет?

Munin в сообщении #1082078 писал(а):
"Направляющие углы" не имеют ничего общего с последовательными поворотами. Вам нужно взять единственный поворот, но вокруг оси, заданной вектором.

-- 14.12.2015 15:31:37 --

Вот нужная матрица из Википедии:
https://ru.wikipedia.org/wiki/Матрица_поворота#Матрица_поворота_вокруг_произвольной_оси
    Цитата:
    Пусть ось вращения задана единичным вектором ${\hat {\mathbf {v} }}=(x,y,z),$ а угол поворота $\theta.$
    Тогда матрица поворота в декартовых координатах имеет вид:
    $$M({\hat {\mathbf {v} }},\theta )={\begin{pmatrix}\cos \theta +(1-\cos \theta )x^{2}&(1-\cos \theta )xy-(\sin \theta )z&(1-\cos \theta )xz+(\sin \theta )y\\(1-\cos \theta )yx+(\sin \theta )z&\cos \theta +(1-\cos \theta )y^{2}&(1-\cos \theta )yz-(\sin \theta )x\\(1-\cos \theta )zx-(\sin \theta )y&(1-\cos \theta )zy+(\sin \theta )x&\cos \theta +(1-\cos \theta )z^{2}\end{pmatrix}}$$


Не могли бы вы прокомментировать, каким образом найти угол поворота?

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение16.12.2015, 15:54 
Заслуженный участник
Аватара пользователя


18/05/06
13438
с Территории
DagerD в сообщении #1082655 писал(а):
ИСН в сообщении #1082329 писал(а):
Ну если есть векторы "до" и "после", то тут вообще делать нечего. Способов полно разных. Я бы пошёл как-то так:
1. Взял любой вектор, нашёл векторное произведение между ним "до" и им же "после". Это будет наша ось. Вокруг этой оси поворачиваем, чтобы вектор привести в новое положение.
2. Теперь бросаем ту ось, и вокруг самого этого вектора (чтобы его не сбить - он уже стоит как надо) поворачиваем, чтобы привести всё остальное в новое положение. Угол находим по какому-нибудь другому вектору.


1.: Не совсем ясно, откуда взять угол поворота вокруг оси. Мы должны повернуть по осям Х и У, чтобы совместить Z?

2.: И тут нам соответственно для каждой оси свой угол искать, разве нет?

Не надо поворачивать вокруг никакого X. Не надо поворачивать вокруг никакого Y. Не надо совмещать никакой Z. Надо повернуть вокруг оси, найденной так, как я сказал. Вообще говоря, это не X и не Y. Матрицу поворота вокруг произвольной оси на произвольный угол - смотрите выше. Угол - это угол между векторами "до" и "после". Найти его можно через скалярное произведение.
Для второй оси, да, угол будет свой и искать его надо по-своему.

-- менее минуты назад --

Моё решение - компромисс между Вашим (три поворота, но не работает) и тем, что предлагает Munin (один поворот, но его сложновато искать).

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение16.12.2015, 16:13 
Заслуженный участник


26/05/14
981
DagerD в сообщении #1082655 писал(а):
slavav в сообщении #1082322

писал(а):
Отлично. Первый шаг сделан. Второй: вычислите матрицу которая переведёт три пункта в первой системе координат в три орта.

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


Нет. Вторая СК - это третий шаг. А пока надо найти матрицу, которая три пункта из первой СК отобразит в три орта.

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение16.12.2015, 19:36 
Заслуженный участник
Аватара пользователя


30/01/06
72407
DagerD в сообщении #1082655 писал(а):
Не могли бы вы прокомментировать, каким образом найти угол поворота?

Если вы знаете ось и угол, то используете эту матрицу. Если не знаете угла, но знаете совмещаемые при повороте точки, то поступаете, как пишет slavav: находите матрицу как решение системы уравнений $Ap_i=p'_i.$

 Профиль  
                  
 
 Re: Поворот системы координат.
Сообщение18.12.2015, 01:01 


14/12/15
7
slavav в сообщении #1082681 писал(а):
DagerD в сообщении #1082655 писал(а):
slavav в сообщении #1082322

писал(а):
Отлично. Первый шаг сделан. Второй: вычислите матрицу которая переведёт три пункта в первой системе координат в три орта.

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


Нет. Вторая СК - это третий шаг. А пока надо найти матрицу, которая три пункта из первой СК отобразит в три орта.


Вы меня простите, но я так и не понял, что сделать на этом шаге. На первом шаге вы вычислили матрицу отображения трех ортов в три пункта, так?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group