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

Вычисление косинуса угла между векторами, в чем ошибка - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.70
Менчендайзер
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 19
12.06.2012, 19:34     Вычисление косинуса угла между векторами, в чем ошибка #1
Написать программу для вычисления косинуса
угла между векторами, заданными своими координатами
(скалярное произведение векторов делится на произведе-
ние модулей этих векторов) . Для вычисления скалярного
произведения и модуля вектора оформить отдельную
функцию.

Вот моя версия
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
#include <iostream>
#include <cmath>
#include <math.h>
#include <windows.h>
using namespace std; 
float cosin(float a,float b);
float b1,a1,co,x11,y11,x12,y12,x21,y21,x22,y22; 
int main()
{   setlocale (LC_ALL, "Russian");
    cout<<"\n введи координаты векторов x11,y11,x12,y12,x21,y21,x22,y22\n  ";
 cin>>x11>>y11>>x12>>y12>>x21>>y21>>x22>>y22;
a1=sqrt( ((x12-x11)*(x12-x11)) +  ((y12-y11)*(y12-y11)) );
b1=sqrt( ((x22-x21)*(x22-x21)) +  ((y22-y21)*(y22-y21)) );
cout<<"длины векторов "<<a1<<" "<<b1;
co=cosin(a1,b1); 
cout<<"\n"; cout<<"косинус угла= "<<co<<"\n";
return 0;}
 
float cosin(float b,float a)
{ float c,X1,Y1,X2,Y2;
X1= x12-x11;
Y1= y12-y11;
X2= x22-x21;
Y2= x22-x21;
c= ( (X1*X2) + (Y1*Y2) ) / ( (fabs(a) * fabs(b)) );
return (c); }
Добавлено через 1 минуту
Она как-бы правильная, но нужно поставить ограничение чтобы косинус углп больше 1 не считал

Добавлено через 2 минуты
Люди!!! Помогите!!! пожалуйста!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
web1720
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 10
12.06.2012, 20:23     Вычисление косинуса угла между векторами, в чем ошибка #2
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
#include <iostream>
#include <cmath>
#include <math.h>
#include <windows.h>
using namespace std; 
float cosin(float a,float b);
float b1,a1,co,x11,y11,x12,y12,x21,y21,x22,y22; 
int main()
{   setlocale (LC_ALL, "Russian");
    cout<<"\n введи координаты векторов x11,y11,x12,y12,x21,y21,x22,y22\n  ";
 cin>>x11>>y11>>x12>>y12>>x21>>y21>>x22>>y22;
a1=sqrt( ((x12-x11)*(x12-x11)) +  ((y12-y11)*(y12-y11)) );
b1=sqrt( ((x22-x21)*(x22-x21)) +  ((y22-y21)*(y22-y21)) );
cout<<"длины векторов "<<a1<<" "<<b1;
co=cosin(a1,b1); 
if (co>=1) cout<<"Не существует"; else
cout<<"\n"; cout<<"косинус угла= "<<co<<"\n";
return 0;}
 
float cosin(float b,float a)
{ float c,X1,Y1,X2,Y2;
X1= x12-x11;
Y1= y12-y11;
X2= x22-x21;
Y2= x22-x21;
c= ( (X1*X2) + (Y1*Y2) ) / ( (fabs(a) * fabs(b)) );
return (c); }
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
12.06.2012, 20:29     Вычисление косинуса угла между векторами, в чем ошибка #3
В строке 24 используются не те координаты (икс вместо игрека).
Менчендайзер
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 19
12.06.2012, 21:09  [ТС]     Вычисление косинуса угла между векторами, в чем ошибка #4
Огромное СПАСИБО!!!!!

Добавлено через 20 минут
Эх, к сожалению неправильно

Добавлено через 2 минуты
ввёл координаты где получается cos2=1
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
12.06.2012, 21:28     Вычисление косинуса угла между векторами, в чем ошибка #5
Цитата Сообщение от Менчендайзер Посмотреть сообщение
ввёл координаты где получается cos2=1
Поподробнее. Что ввёл, что получил?
Менчендайзер
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 19
13.06.2012, 07:33  [ТС]     Вычисление косинуса угла между векторами, в чем ошибка #6
вот результат
Миниатюры
Вычисление косинуса угла между векторами, в чем ошибка  
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
13.06.2012, 11:07     Вычисление косинуса угла между векторами, в чем ошибка #7
Ну и что неправильно? Заданы 2 параллельных вектора. Угол между ними равен нулю. Косинус такого угла равен единице. Что не так?
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 11:24     Вычисление косинуса угла между векторами, в чем ошибка #8
Господи ты боже мой - ну что за ерись тут написана вообще
Вот это длины векторов
Цитата Сообщение от web1720 Посмотреть сообщение
a1=sqrt( ((x12-x11)*(x12-x11)) + *((y12-y11)*(y12-y11)) );
b1=sqrt( ((x22-x21)*(x22-x21)) + *((y22-y21)*(y22-y21)) );
cout<<"длины векторов "<<a1<<" "<<b1;
А кто вам сказал вообще что они пересекаются либо пересекаются в точке которая одинакова для какого либо конца из векторов????!

grizlik78, претендуешь на логичность и носишь лэйбл эксперт, ну так потрудись найти точку пересечения векторов, затем найди длины открезков отсекаемых данной точкой на каждом векторе. Найди расстояние между концами векторов и потом уже используй формулу косинусов.
Ребята без обид вам обоим жирная пара по геометрии и алгебре особенно тебе
grizlik78, Эксперт C++.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
13.06.2012, 11:30     Вычисление косинуса угла между векторами, в чем ошибка #9
-=ЮрА=-, если не в курсе чем вектор отличается от направленного отрезка, то помалкивал бы, а?
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 11:33     Вычисление косинуса угла между векторами, в чем ошибка #10
Для решения задачи нужно 1-е найти точку О пересечения векторов и если таковая есть (а ведь вектора могут быть параллельными или даже лежать на одной прямой), затем найти одну из длин отмеченную красным. А вот потом уже считать косинус
Миниатюры
Вычисление косинуса угла между векторами, в чем ошибка  
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 11:34     Вычисление косинуса угла между векторами, в чем ошибка #11
Цитата Сообщение от grizlik78 Посмотреть сообщение
-=ЮрА=-, если не в курсе чем вектор отличается от направленного отрезка, то помалкивал бы, а?
- насмешил меня
grizlik78, я как раз в курсе, а ты демонстрируешь полное незнание того о чём я написал выше, не обижайся я констатирую пока что факты
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
13.06.2012, 11:39     Вычисление косинуса угла между векторами, в чем ошибка #12

Не по теме:

-=ЮрА=-, да ты известный констататор и вычислятор бесконечностей.


Исходная программа верна (за исключением перепутанных по копировании координат). Вот это факт.
Чтобы между векторами можно было найти угол они не обязаны пересекаться. Это тоже факт.
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 11:50     Вычисление косинуса угла между векторами, в чем ошибка #13
- итак мы заговорили о пересечении векторов)
Так вот если твои вектора в одной плоскости то либо пересекаются их продолжения (впрочем это называется линиями действия векторов или силовыми линиями, как тебе будет угодно) либо пересекаться так как указано на моём рисунке. И в том и другом случае между векторами есть угол
Если же говорим о векторах в пространстве то там нужно либо задание плоскостей либо смотреть углы пересечения их проекций.
Кстати вот тебе твой факт на рисунке,
Цитата Сообщение от grizlik78 Посмотреть сообщение
Чтобы между векторами можно было найти угол они не обязаны пересекаться.
, ну и что точка О находится вконце одной из точек задающих векторы, а ты именно из этого исходишь когда уголок то считаешь)
grizlik78, чувак сходи в школу!
Миниатюры
Вычисление косинуса угла между векторами, в чем ошибка  
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
13.06.2012, 11:55     Вычисление косинуса угла между векторами, в чем ошибка #14
Зачем приплетать сюда пространство, когда в исходной задаче координаты двухмерные?
Я разве говорил, что если 2 вектора не пересекаются, то между ними нет угла? Не приписывай мне свои фантазии. Угол как раз есть, а чтобы его найти вовсе не обязательно искать точку пересечения. Этому как раз в школе и учат. Прогуливал?
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 12:04     Вычисление косинуса угла между векторами, в чем ошибка #15
Цитата Сообщение от grizlik78 Посмотреть сообщение
Зачем приплетать сюда пространство, когда в исходной задаче координаты двухмерные?
Я разве говорил, что если 2 вектора не пересекаются, то между ними нет угла? Не приписывай мне свои фантазии. Угол как раз есть, а чтобы его найти вовсе не обязательно искать точку пересечения. Этому как раз в школе и учат. Прогуливал?
- о пространсве я речь завёл для полноты ответа, а на счёт остального, я тебе написал случай когда отстаиваемый тобой алгоритм будет давать неверный результат. Ты либо параллельный перенос вводи (с коррективом координат), либо будь добр находить точку пересечения.
Кстати точка пересечения - это решение системы
y0 = k1*x0 + b1
y0 = k2*x0 + b2
которую в школе решают уже в 5-м классе(впрочем видимо ты и вправду прогуливал школу раз этого не знаешь)Как находить угловой коэффициент и свободный член в уравнениях напоминать или ты всё же что-то из школы почерпнул?

Не по теме:

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

grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
13.06.2012, 12:08     Вычисление косинуса угла между векторами, в чем ошибка #16
Короче, хватит уже на личности переходить.
Давай в числах пример.
Такие-то координаты надо ввести, такой-то результат должен получится, а отстаиваемый мной метод здесь будет неправильно работать.
-=ЮрА=-
13.06.2012, 12:09
  #17

Не по теме:

Цитата Сообщение от grizlik78 Посмотреть сообщение
Короче, хватит уже на личности переходить.
Давай в числах пример.
Такие-то координаты надо ввести, такой-то результат должен получится, а отстаиваемый мной метод здесь будет неправильно работать.
- хорошо пара минут...

-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 12:17     Вычисление косинуса угла между векторами, в чем ошибка #18
grizlik78, вобщем смотри - это прямые которые пересекаются под прямым углом

(0;1) -> (1;2)
(0;-1) ->(1;-2)
Вот что вывела программа, а на втором рисунке пространственное расположение точек
В коде преобразовал лишь руссификацию(т.к. в данный момент у меня под рукой 6-ка). Код тоже выкладываю
Твой же код
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
#include <iostream>
#include <cmath>
#include <math.h>
#include <windows.h>
using namespace std; 
 
float cosin(float a,float b);
float b1,a1,co,x11,y11,x12,y12,x21,y21,x22,y22; 
int main()
{   
    system("chcp 1251");
    cout<<"\n ââåäè êîîðäèГ*Г*ГІГ» âåêòîðîâ x11,y11,x12,y12,x21,y21,x22,y22\n  ";
    cin>>x11>>y11>>x12>>y12>>x21>>y21>>x22>>y22;
    a1=sqrt( ((x12-x11)*(x12-x11)) +  ((y12-y11)*(y12-y11)) );
    b1=sqrt( ((x22-x21)*(x22-x21)) +  ((y22-y21)*(y22-y21)) );
    cout<<"äëèГ*Г» âåêòîðîâ "<<a1<<" "<<b1;
    co=cosin(a1,b1); 
    if (co>=1) 
        cout<<"ГЌГҐ Г±ГіГ№ГҐГ±ГІГўГіГҐГІ"; else
    cout<<"\n"; cout<<"êîñèГ*ГіГ± ГіГЈГ«Г*= "<<co<<"\n";
    return 0;
}
 
float cosin(float b,float a)
{ 
    float c,X1,Y1,X2,Y2;
    X1= x12-x11;
    Y1= y12-y11;
    X2= x22-x21;
    Y2= x22-x21;
    c= ( (X1*X2) + (Y1*Y2) ) / ( (fabs(a) * fabs(b)) );
return (c); 
}
Миниатюры
Вычисление косинуса угла между векторами, в чем ошибка   Вычисление косинуса угла между векторами, в чем ошибка  
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
13.06.2012, 12:28     Вычисление косинуса угла между векторами, в чем ошибка #19
Ну это я не знаю, какую программу ты используешь. Либо неисправленную, либо исправленную неправильно.
Вот эта правильный ответ даёт:
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
37
#include <iostream>
#include <cmath>
 
using namespace std; 
 
float cosin(float a,float b);
float b1,a1,co,x11,y11,x12,y12,x21,y21,x22,y22; 
 
int main()
{
    setlocale (LC_ALL, "");
    
    cout<<"\n введи координаты векторов x11,y11,x12,y12,x21,y21,x22,y22\n  ";
    cin>>x11>>y11>>x12>>y12>>x21>>y21>>x22>>y22;
    
    a1=sqrt( ((x12-x11)*(x12-x11)) +  ((y12-y11)*(y12-y11)) );
    b1=sqrt( ((x22-x21)*(x22-x21)) +  ((y22-y21)*(y22-y21)) );
    cout<<"длины векторов "<<a1<<" "<<b1;
 
    co=cosin(a1,b1); 
    
    cout<<"\n"; cout<<"косинус угла= "<<co<<"\n";
    return 0;
}
 
float cosin(float b,float a)
{
    float c,X1,Y1,X2,Y2;
    
    X1= x12-x11;
    Y1= y12-y11;
    X2= x22-x21;
    Y2= y22-y21;
    
    c= ( (X1*X2) + (Y1*Y2) ) / ( (fabs(a) * fabs(b)) );
    return c;
}
Добавлено через 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Твой же код
С каких это пор этот код мой? Я до последнего сообщения в этой теме кода вообще не выкладывал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 12:36     Вычисление косинуса угла между векторами, в чем ошибка
Еще ссылки по теме:

C++ В чем может быть ошибка. Расстояние между вершинами дерева
Программа для определения угла между векторами C++
Косинус угла между векторами C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
13.06.2012, 12:36     Вычисление косинуса угла между векторами, в чем ошибка
  #20

Не по теме:

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

Yandex
Объявления
13.06.2012, 12:36     Вычисление косинуса угла между векторами, в чем ошибка
Ответ Создать тему
Опции темы

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