2014 dxdy logo

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

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


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


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Расчёт матрицы поворота
Сообщение02.04.2016, 23:06 
Аватара пользователя


21/09/14
25
Придумал такую задачу и не могу решить. Нужно расчитать матрицу поворота базиса если дан вектор который направлением характеризует ось и направление поворота, а длиной - угол поворота.

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение02.04.2016, 23:08 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Это даже в Википедии написано. Если хотите самостоятельно решить - используйте скалярное и векторное произведения, чтобы вычислить линейную комбинацию новых координат от старых.

 Профиль  
                  
 
 Как решал задачу я
Сообщение02.04.2016, 23:47 
Аватара пользователя


21/09/14
25
Решение - перемножение 5 матриц. Первое пребразование - поворачивает по оси z так что ВОП (данный Вектор Оси Поворота), ось z и ось y встали на одной плоскости, а ось x нормален этой плоскости. Второе преобразование - поворот по оси x, так чтобы вектор z сонаправился с ВОП. Потом поворот по оси z на угол равный длине ВОП. Четвертое преобразование обратно второму, а пятое - первому.

Получилось такое:

$$ \left(
  \begin{array}{ccc}
    \frac{a\,b\,\sin{\varphi }+c\,\varphi\,\cos{\varphi }}{c\,\varphi }
    & \frac{\left(c^2+a^2\right)\,\sin{\varphi }}{c\,\varphi }
    &-\frac{a\,\varphi\,\sin{\varphi }+b\,c\,\cos{\varphi
      }-b\,c}{c\,\varphi }\\
    -\frac{\left(c^2+b^2\right)\,\sin{\varphi }}{c\,\varphi }
    &-\frac{a\,b\,\sin{\varphi }-c\,\varphi\,\cos{\varphi
      }}{c\,\varphi }
    &\frac{b\,\varphi\,\sin{\varphi }-a\,c\,\cos{\varphi
      }+a\,c}{c\,\varphi }\\
    0 & 0 & 1 \\
  \end{array}\right) $$

Здесь $\{a;b;c\}$ - ВОП, а $\varphi=\sqrt{a^2+b^2+c^2}$. При
$a=b=0;\,c=\pi/2$ работает, но видно что это бред.

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение02.04.2016, 23:54 
Заслуженный участник


27/04/09
28128
Вы лучше забудьте на время про матрицы. Просто выразите поворот какого-нибудь вектора $\vec v$ (а ваш данный пусть, например, зовётся $\vec a$ — от axis, angle), используя, как Munin уже предложил, скалярное и векторное произведения. Матрицу потом нарисуем.

(Если совсем нет идей, открывайте)

Спроецируйте $\vec v$ на прямую, задаваемую $\vec a$. Найдите и оставшееся от $\vec v$ слагаемое, ортогональное $\vec a$. Что происходит с каждым из них при повороте? Как это сделать?

 Профиль  
                  
 
 Posted automatically
Сообщение02.04.2016, 23:58 


20/03/14
12041
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Карантин»
по следующим причинам:

- неправильно набраны формулы (краткие инструкции: «Краткий FAQ по тегу [math]» и видеоролик Как записывать формулы);
Ссылку на изображение убирайте.

Исправьте все Ваши ошибки и сообщите об этом в теме Сообщение в карантине исправлено.
Настоятельно рекомендуется ознакомиться с темами Что такое карантин и что нужно делать, чтобы там оказаться и Правила научного форума.

 Профиль  
                  
 
 Posted automatically
Сообщение03.04.2016, 01:11 


20/03/14
12041
 i  Тема перемещена из форума «Карантин» в форум «Помогите решить / разобраться (М)»

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 02:35 
Аватара пользователя


21/09/14
25
arseniiv в сообщении #1111620 писал(а):
Вы лучше забудьте на время про матрицы. Просто выразите поворот какого-нибудь вектора $\vec v$ (а ваш данный пусть, например, зовётся $\vec a$ — от axis, angle), используя, как Munin уже предложил, скалярное и векторное произведения. Матрицу потом нарисуем.


В принципе я так и сделал. $\vec{a}$ поворочивается в $\vec{a}'$, поворот задаёт $\vec{v}$, $\vec{s}$ - сонаправленная к $\vec{v}$ часть $\vec{a}$, $\vec{u}$ и $\vec{u}'$ - ортогональные к $\vec{v}$ части $\vec{a}$ и $\vec{a}'$ соответсвтенно.

$$\vec{s}=\frac{\vec{v}\left(\vec{a} \cdot
  \vec{v}\right)}{\left|\vec{v}\right|^ 2},\quad \vec{u}=\vec{a}-\vec{s}$$

$$\left(\vec{u} \cdot \vec{u}'\right)=u^2 \cos{\left|\vec{v}\right|},\quad \left[\vec{u} \times \vec{u}'\right]=\frac{\vec{v} u^2
  \sin{\left|\vec{v}\right|}}{\left|\vec{v}\right|}$$



$$u'_{1}=\frac{u_{1}\left(\vec{u} \cdot \vec{u}'\right)
 -u_{2}\left[\vec{u} \times \vec{u}'\right]_{3}+u_{3}\left[\vec{u} \times \vec{u}'\right]_{2}}{u^2}$$

$$u'_{2}=\frac{u_{2} \left(\vec{u} \cdot \vec{u}'\right)+u_{1}\left[\vec{u} \times
    \vec{u}'\right]_{3}-u_{3}\left[\vec{u} \times \vec{u}'\right]_{1}}{u^2}$$

$$u'_{3}= \frac{u_{3}\left(\vec{u} \cdot \vec{u}'\right)-u_{1} \left[\vec{u} \times
    \vec{u}'\right]_{2}+u_{2}\left[\vec{u} \times \vec{u}'\right]_{1}}{u^2}$$


$$\vec{a}'=\vec{s}+\vec{u}'$$

Как вы наверно поняли я ищу не какое-то частное решение, а хочу написать программу, которая должна по вектору выдавать матрицу. Если всё это свалить в один вектор, то формулы получаются пятнадцатиэтажными и я пока не знаю как их упрощать. Я так понял нужно ещё раскладывать компоненты на множители компонент $\vec{a}$, чтобы получить компоненты матрицы.

UPD

Есть идея - взять базис, с помощью формул выше получить повёрнутый базис и составить систему уравнений. 9 уравнений на 9 неизвестных компонентов матрицы.

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 12:24 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Подсказка:
$\vec{u}\,'=\vec{u}\cos\alpha+\vec{w}\sin\alpha,$
где $\vec{w}=\dfrac{1}{|\vec{v}|}[\vec{a}\times\vec{v}].$
А ваши уравнения
$\left(\vec{u} \cdot \vec{u}\,'\right)=u^2 \cos{\left|\vec{v}\right|},\quad \left[\vec{u} \times \vec{u}\,'\right]=\dfrac{\vec{v} u^2\sin{\left|\vec{v}\right|}}{\left|\vec{v}\right|}$
выбросьте, потому что они не линейные, а квадратичные по $\vec{u},\vec{u}\,'.$

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 12:31 
Аватара пользователя


21/09/14
25
Вот такие вот дела:

$$\varphi = \left|\vec{v}\right|,\quad \vec{e}_v=\frac{\vec{v}}{\left|\vec{v}\right|}$$


$$\vec{s}=\vec{e}_v \left(\vec{a} \cdot \vec{e}_v \right),\quad \vec{u}=\vec{a}-\vec{s}$$

$$\vec{u}'=\vec{u} \cos{\varphi}+\left[\vec{e}_v \times \vec{u}\right] \sin{\varphi}, \quad \vec{a}'=\vec{s}+\vec{u}'$$

Что-то мне кажется, что всё это можно было получить не разбивая в кашу из компонент и не разгребая её потом.

UPD

Уже не кажется, а ясно видно.

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 13:24 
Заслуженный участник
Аватара пользователя


30/01/06
72407
А разбивать в кашу из компонент надо на следующем этапе. Когда вы эти формулы должны будете превратить в матричные.

-- 05.04.2016 13:26:25 --

(Если вы пишете программу для поворота, то приводить это к матричной форме не обязательно. Но изначально вы ставили математическую задачу - найти матрицу.)

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 13:44 
Аватара пользователя


21/09/14
25
Munin в сообщении #1112320 писал(а):
Если вы пишете программу для поворота, то приводить это к матричной форме не обязательно. Но изначально вы ставили математическую задачу - найти матрицу.)


Я пишу программу, которая находит матрицу поворота.

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 14:23 
Заслуженный участник
Аватара пользователя


30/01/06
72407
А, ну тогда придётся всё-таки выписать всё в компонентах. Но вам осталось уже всего ничего.

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 15:09 
Аватара пользователя


21/09/14
25
Нашёл эту матрицу:

$$M_{ij}= e_{vi}e_{vj}(1-\cos{\varphi})+\delta^i_j\cos{\varphi}-
\left(1 -\delta^i_j\right) (-1)^{(i+j)} e_{v(6-ij)}
\sin{\varphi}$$

Только потом нашёл параграф на википедии с такой же формулой.

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 17:27 
Аватара пользователя


21/09/14
25
Нашёл пару ошибок:

$$M_{ij}= e_{vi}e_{vj}(1-\cos{\varphi})+\delta^i_j\cos{\varphi}+
\text{\rm sign}\,(j-i)(-1)^{(i+j)} e_{v(6-i-j)}
\sin{\varphi}$$

 Профиль  
                  
 
 Re: Расчёт матрицы поворота
Сообщение05.04.2016, 18:43 
Аватара пользователя


21/09/14
25
Имплементировал это дело для maxima CAS:

код: [ скачать ] [ спрятать ]
Используется синтаксис Lisp
(in-package :maxima)

(MEVAL* '(($LOAD) "eigen"))


(defun $rotation_vector_to_matrix (axis-vector
                                   &optional rotation-angle)
  (let ((rotation-angle (or rotation-angle
                            (MEVAL* `((%SQRT)
                                      ((MNCTIMES) ,axis-vector
                                                  ,axis-vector)))))
        (axis-vector (MEVAL* `(($UVECT) ,axis-vector))))
    ($ratsimp
     (apply #'$matrix
            (loop :for i :in '(1 2 3)
                  :with v = (loop :for i :from 1 :to 3
                                  :collect (MEVAL* `((MQAPPLY ARRAY)
                                                     ,axis-vector ,i)))
                  :with c = (MEVAL* `((%cos) ,rotation-angle))
                  :collect
                  `((mlist)
                    ,@(loop :for j :in '(1 2 3)
                            :collect
                            `((mplus)
                              ((MTIMES) ,(elt v (1- i))
                               ,(elt v (1- j))
                               ((MPLUS SIMP) 1
                                ((MTIMES SIMP) -1 ,c)))
                              ,(if (= i j)
                                   c
                                   `((MTIMES)
                                     ,(let ((el (elt v
                                                     (- 5
                                                        i j))))
                                        (if (eql (evenp (+ i j))
                                                 (< i j))
                                            el
                                            `((MMINUS) ,el)))
                                     ((%sin) ,rotation-angle)))))))))))
 

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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



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

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


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

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