2014 dxdy logo

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

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




 
 Угол между векторами
Сообщение06.03.2011, 14:34 
Здравствуйте!

Опять вопрос из практики любительского мат. программирования :)
Мне необходимо вычислить угол между двумя векторами с тем, чтобы составить матрицу поворота.

Проблема вот в чем: вычисление через формулу скалярного произведение дает только косинус угла - результат, понятно, бывает от 0 до 180 градусов. Мне же важен порядок векторов - в результате поворота первый вектор должен перейти во второй, и никак не наоборот - даже если угол между вторым и первым 30 градусов, а между первым и вторым - 330.

Я же истово желаю, чтобы в результате применения некоторой волшебной формулы я понял, что угол именно 330, а не 30 градусов.

Поворот подразумевается против часовой стрелки в декартовой прямоугольной системе координат.
Все происходит исключительно на плоскости.

Вполне допускаю, что я туп как пробка или не помню каких-то очевидных вещей - тем не менее, прошу Вашей помощи)

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 14:38 
трехмерное пространство или двумерное?

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 14:39 
Двумерное :)

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 14:41 
Аватара пользователя
Повороты чувствует векторное произведение. Пользуясь им и скалярным можно полностью всю информацию о любых углах между ними получить.

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 14:42 
The DEADman в сообщении #419887 писал(а):
Все происходит исключительно на плоскости.
А Вы на секундочку выйдите за пределы плоскости, возьмите там у них векторное произведение, и ныряйте обратно на плоскость.
Имея и косинус, и синус можно горы свернуть.

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 14:43 
Аватара пользователя
Алексей К.

(Оффтоп)

Физтехи чувствуют и думают одинаково :-)

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 14:51 
Умножьте матрицу
$\left[ \begin {array}{cc} \cos \left( \alpha \right) &-\sin \left( 
\alpha \right) \\ \noalign{\medskip}\sin \left( \alpha \right) &\cos
 \left( \alpha \right) \end {array} \right] 
$
на ваш вектор и он повернется (против часовой стрелки) на угол $\alpha$

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 14:54 
Итак, я представляю вектора в виде a(x_1, y_1, 1) и b(x_2, y_2, 1).

Если я правильно вычисляю, результирующий вектор будет равен: c(y_1-y_2, x_2-x_1, x_1*y_2 - y_1*x_2). Вроде?

А дальше-то как?
В формуле для векторного произведения разве не модуль синуса стоит?..
(или это ненадежный источник в Интернет)

mihailm, спасибо! Но матрицей поворота я орудовать как раз умею; тут проблема немножко в другом, как мне синус посчитать)

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 16:23 
The DEADman в сообщении #419898 писал(а):
В формуле для векторного произведения разве не модуль синуса стоит?..
Конечно, нет. Модуль может кто-нибудь впарить, когда пишет длину результирующего вектора.
$$\angle=\mathrm{atan}(x_1y_2-x_2y_1,\:x_1y_1+x_2y_2).$$Или atan2, смотртя на чём Вы программируете.

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 17:05 
Да, действительно, это была формула модуля.
А как по векторному произведению узнать собственно синус угла, без всяких абсолютных значений?..

Алексей К., спасибо! А что за выражение в формуле?

Вот еще наткнулся на некую вещь, с которой ни разу ни в школе, ни в университете отчего-то не сталкивался:

http://ru.wikipedia.org/wiki/%D0%9F%D1% ... 0%B8%D0%B5

Не проще ли взять синус угла оттуда заместо векторного произведения?

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 17:48 
Это то же самое. Зэт-компоненту векторного произведения векторов на плоскости переназвали псевдоскалярным произведением. Чтоб не ходить за ней в 3D:
Алексей К. в сообщении #419892 писал(а):
А Вы на секундочку выйдите за пределы плоскости, возьмите там у них векторное произведение...

Чем Вам не нравится формула, что я чуть выше написал?

 
 
 
 Re: Угол между векторами
Сообщение06.03.2011, 17:55 
Да, я разобрался, спасибо!

 
 
 [ Сообщений: 12 ] 


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