2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 Поворот системы координат.
Сообщение14.12.2015, 06:34 
Здравствуйте. Встала задача поворота системы координат по осям. Очевидно, что нужно использовать матрицы поворота, последовательно перемножив их по каждой из осей, только вот никак это у меня не получается. Из начальных данных имеются координаты ( Х, 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 
Аватара пользователя
"Направляющие углы" не имеют ничего общего с последовательными поворотами. Вам нужно взять единственный поворот, но вокруг оси, заданной вектором.

-- 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 
Тогда я не особо понимаю, как в моем случае будет вычисляться угол поворота.

 
 
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 00:47 
Сколько у вас пунктов? Если есть хотя бы три не в одной плоскости, то можно вычислить матрицу поворота без тригонометрии.

 
 
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 01:28 
Конкретно в данном случае 13, но нужно будет уточнить, сколько минимум пунктов планируется создавать вообще. Мне бы идеально подошел способ, позволяющий перевести координаты из условной СК в истинную при любом количестве пунктов, хотя я и с удовольствием рассмотрю любые другие.

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

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

 
 
 
 Re: Поворот системы координат.
Сообщение15.12.2015, 10:44 
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 
Отлично. Первый шаг сделан. Второй: вычислите матрицу которая переведёт три пункта в первой системе координат в три орта.

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

 
 
 
 Re: Поворот системы координат.
Сообщение16.12.2015, 14:44 
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 
Аватара пользователя
DagerD в сообщении #1082655 писал(а):
ИСН в сообщении #1082329 писал(а):
Ну если есть векторы "до" и "после", то тут вообще делать нечего. Способов полно разных. Я бы пошёл как-то так:
1. Взял любой вектор, нашёл векторное произведение между ним "до" и им же "после". Это будет наша ось. Вокруг этой оси поворачиваем, чтобы вектор привести в новое положение.
2. Теперь бросаем ту ось, и вокруг самого этого вектора (чтобы его не сбить - он уже стоит как надо) поворачиваем, чтобы привести всё остальное в новое положение. Угол находим по какому-нибудь другому вектору.


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

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

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

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

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

 
 
 
 Re: Поворот системы координат.
Сообщение16.12.2015, 16:13 
DagerD в сообщении #1082655 писал(а):
slavav в сообщении #1082322

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

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


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

 
 
 
 Re: Поворот системы координат.
Сообщение16.12.2015, 19:36 
Аватара пользователя
DagerD в сообщении #1082655 писал(а):
Не могли бы вы прокомментировать, каким образом найти угол поворота?

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

 
 
 
 Re: Поворот системы координат.
Сообщение18.12.2015, 01:01 
slavav в сообщении #1082681 писал(а):
DagerD в сообщении #1082655 писал(а):
slavav в сообщении #1082322

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

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


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


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

 
 
 [ Сообщений: 16 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group