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 ] 

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



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

Сейчас этот форум просматривают: epros


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

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