Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sweetbringer
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 14
#1

Программа для определения угла между векторами - C++

17.08.2014, 08:00. Просмотров 550. Ответов 4
Метки нет (Все метки)

Я нашел такую программу внизу,
немного исправил ее,
но не знаю, что watch означает
и зачем он вообще и все ли тут правильно.
Мне нужно определить угол между векторами
тот, что меньше. (Больше он 90 град или нет)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void cross( CPlace *a, CPlace *b, CPlace *c)
{
    c->x=+a->y*b->z - b->y*a->z;
    c->y=-a->x*b->z + b->x*a->z;
    c->z=+a->x*b->y - b->x*a->y;
}
 
double dot( CPlace *a, CPlace *b)
{
  return (a->x*b->x + a->y*b->y + a->z*b->z);
}
 
double normLen(CPlace *a)
{
  return sqrt(dot(a,a));
}
 
void normalize( CPlace *a, CPlace *b)
{
  double l;
    l = 1.0/normLen(a);
    b->x=a->x*l;
    b->y=a->y*l;
    b->z=a->z*l;
}
 
double getAngleBetweenVectors( CPlace *a, CPlace *b, CPlace *watch)
{
  CPlace c;
    cross(a,b,&c);
  double f;
    f = atan2(normLen(&c), dot(a,b));
  if (dot(&c, watch) < 0)
    f = 2*PI - f;
  return f;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2014, 08:00     Программа для определения угла между векторами
Посмотрите здесь:

C++ Программа для определения дня недели для произвольной даты
Как сделать шаблон функции для определения максимального расстояния между элементами C++
Определите косинус между векторами C++
C++ Написать программу нахождения угла между векторами и плоскостью.
C++ Вычисление косинуса угла между векторами, в чем ошибка
Программа для определения даты следующего дня C++
Программа для определения минорных аккордов от мажорных C++
C++ Найти угол между векторами
C++ Определения угла между отрезком и Осью Ох
Косинус угла между векторами C++
C++ Программа для определения попадания точки с координатами (x, y) в мишень
C++ Ограничение градуса между векторами

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alexandr_1982
175 / 71 / 17
Регистрация: 04.11.2013
Сообщений: 382
Записей в блоге: 4
17.08.2014, 16:30     Программа для определения угла между векторами #2
C++
1
2
3
struct CPlace {
double x, y, z
};
watch это указатель на структуру с координатами

Скалярное произведение двух векторов a, b есть скаляр |a|*|b|* cos(R).
Взятие acos(R) дает угол.|a| это норма вектора a которая является квадратным корнем от выражения (x*x + y*y + z*z).
sweetbringer
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 14
17.08.2014, 21:11  [ТС]     Программа для определения угла между векторами #3
Надо написать пример вызова

getAngleBetweenVectors( CPlace *a, CPlace *b, CPlace *watch)

и результат и объяснить, что каждое число означает.
Я не понимаю откуда мне взять числа для этого watch.
И почему оно так называется? Это направление откуда смотрят?
В программе все правильно?
Я исправил ее только для более удобного вида и чтобы не было утечки памяти
из-за new, а правильно ли она считает я не знаю.
Можно ли более коротким путем определить сонаправленность векторов?
(Если вектора отличаются по направлению градусов на 5, например, то это сонаправлены)
Мне нужно узнать больше ли угол между векторами, чем 90 градусов.
Есть ли вообще более короткий способ превратить вектор силового поля в скаляр его длины
с плюсом или минусом по отношению к центру этого поля?
Предполагается, что силы в этом поле направлены только к центру или от центра.
_Ivana
2586 / 1595 / 141
Регистрация: 01.03.2013
Сообщений: 4,563
Записей в блоге: 2
17.08.2014, 21:27     Программа для определения угла между векторами #4
Цитата Сообщение от sweetbringer Посмотреть сообщение
Есть ли вообще более короткий способ превратить вектор силового поля в скаляр его длины
с плюсом или минусом по отношению к центру этого поля?
Предполагается, что силы в этом поле направлены только к центру или от центра.
Длину считаете тривиально по Пифагору, направление не менее тривиально по знакам координат вектора в зависимости от квадранта его расположения. Нарисуйте, распишите варианты и придумайте пару строк проверки условий. Если лениво, то можете просто составить таблицу знаков направления в зависимости от знаков координат вектора и квадранта.
sweetbringer
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 14
17.08.2014, 22:45  [ТС]     Программа для определения угла между векторами #5
Цитата Сообщение от _Ivana Посмотреть сообщение
Длину считаете тривиально по Пифагору, направление не менее тривиально по знакам координат вектора в зависимости от квадранта его расположения. Нарисуйте, распишите варианты и придумайте пару строк проверки условий. Если лениво, то можете просто составить таблицу знаков направления в зависимости от знаков координат вектора и квадранта.
Я это уже делал.
Yandex
Объявления
17.08.2014, 22:45     Программа для определения угла между векторами
Ответ Создать тему
Опции темы

Текущее время: 17:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru