Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скалярное произведение - знак угла? dot product 
:(
    Опции темы
mrgloom
Дата 9.9.2013, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Допустим есть 2 вектора и хотим найти  угол на который надо повернуть 1 вектор чтобы получить другой.
Допустим считаем через скалярное произведение, вектора заданы точками (xi;yi).

Код

        double dot_product= (x1-x0)*(x2-x0)+(y1-y0)*(y2-y0);
        double Angle= (180 / M_PI)*acos(
                    (dot_prod)
                    /(sqrt((double)(x1-x0)*(x1-x0)+(y1-y0)*(y1-y0))
                    *sqrt((double)(x2-x0)*(x2-x0)+(y2-y0)*(y2-y0))));


но угол получается всё время положительным, а по идее чтобы повернуть первый вектор до второго нужно повернуть на угол alpha, соответственно чтобы повернуть второй вектор до первого -alpha.
Нужно считать знак отдельно? или есть какое то другой способ который сразу учитывает направление поворота?

Добавлено @ 09:31
хмм вроде так
http://stackoverflow.com/questions/2150050...between-vectors

но надо проверить.

в итоге вроде работает.

Код

double dx1= (double)(x2-x0);
                double dy1= (double)(y2-y0);
                double dx2= (double)(x1-x0);
                double dy2= (double)(y1-y0);
                deltaAngle= (180 / M_PI)*(atan2(dx2,dy2)-atan2(dx1,dy1));


Это сообщение отредактировал(а) mrgloom - 9.9.2013, 09:44
PM MAIL   Вверх
_Y_
Дата 9.9.2013, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Можно перевести в сферическую систему координат и считат' разнию угловой координаты


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
mrgloom
Дата 11.9.2013, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



появилась близкая задача

user posted image
известны координаты точек  0;1;2  надо найти координаты 2', так же известно, что черный угол это phi, а красный угол это phi/n.

по идее надо получить вторую точку на луче из точки 0 и потом посчитать пересечении линий, которые лежат на точках.
http://en.wikipedia.org/wiki/Line-line_intersection

или есть вариант быстрее?

Это сообщение отредактировал(а) mrgloom - 11.9.2013, 14:50
PM MAIL   Вверх
миг
Дата 17.9.2013, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 15.9.2008

Репутация: нет
Всего: 1



mrgloom, зная углы и координату точки 0 можно найти уравнение прямой 02'. Зная координаты точек 1 и 2 можно найти уравнение прямой 12. Если уравнения прямых известны, то можно найти точку пересечения. Кстати для двумерной системы координат достаточно и одного угла.

--------------------
Oaks may fall when reeds stand the storm.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1850 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.