С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.70
Менчендайзер
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 19
#1

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

12.06.2012, 19:34. Просмотров 4327. Ответов 21
Метки нет (Все метки)

Написать программу для вычисления косинуса
угла между векторами, заданными своими координатами
(скалярное произведение векторов делится на произведе-
ние модулей этих векторов) . Для вычисления скалярного
произведения и модуля вектора оформить отдельную
функцию.

Вот моя версия
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 минуты
Люди!!! Помогите!!! пожалуйста!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2012, 19:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычисление косинуса угла между векторами, в чем ошибка (C++):

Косинус угла между векторами - C++
Помогите! Есть метод класса Anqle //считает величину косинуса угла между векторами template&lt;class Type&gt; double...

Программа для определения угла между векторами - C++
Я нашел такую программу внизу, немного исправил ее, но не знаю, что watch означает и зачем он вообще и все ли тут правильно. Мне...

Написать программу нахождения угла между векторами и плоскостью. - C++
Дан вектор а=(a1, a2, a3) и плоскость, заданная уравнением Ах+Ву+Сz=0. Написать программу нахождения угла между векторами и плоскостью. ...

Вычисление косинуса - C++
: Всем добрового время суток, я пока только начинаю изучать C++ и у меня поэтому много вопросов. Дана программа которая используя...

Вычисление косинуса через ряд - C++
Здравствуйте =) Пытаюсь посчитать косинус через ряд Тейлора, написал программку, но не могу понять, как она считает (результаты не сходятся...

Вычисление косинуса разложением в ряд (C++ и Asm) - C++
В общем такая ситуация: Нужно посчитать cos используя разложение в Ряд Вот мои наброски #include &lt;stdio.h&gt; #include &lt;math.h&gt; ...

21
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); }
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
12.06.2012, 20:29 #3
В строке 24 используются не те координаты (икс вместо игрека).
1
Менчендайзер
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 19
12.06.2012, 21:09  [ТС] #4
Огромное СПАСИБО!!!!!

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

Добавлено через 2 минуты
ввёл координаты где получается cos2=1
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
12.06.2012, 21:28 #5
Цитата Сообщение от Менчендайзер Посмотреть сообщение
ввёл координаты где получается cos2=1
Поподробнее. Что ввёл, что получил?
0
Менчендайзер
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 19
13.06.2012, 07:33  [ТС] #6
вот результат
0
Миниатюры
Вычисление косинуса угла между векторами, в чем ошибка  
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
13.06.2012, 11:07 #7
Ну и что неправильно? Заданы 2 параллельных вектора. Угол между ними равен нулю. Косинус такого угла равен единице. Что не так?
0
-=ЮрА=-
Заблокирован
Автор 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++.
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
13.06.2012, 11:30 #9
-=ЮрА=-, если не в курсе чем вектор отличается от направленного отрезка, то помалкивал бы, а?
1
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 11:33 #10
Для решения задачи нужно 1-е найти точку О пересечения векторов и если таковая есть (а ведь вектора могут быть параллельными или даже лежать на одной прямой), затем найти одну из длин отмеченную красным. А вот потом уже считать косинус
2
Миниатюры
Вычисление косинуса угла между векторами, в чем ошибка  
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 11:34 #11
Цитата Сообщение от grizlik78 Посмотреть сообщение
-=ЮрА=-, если не в курсе чем вектор отличается от направленного отрезка, то помалкивал бы, а?
- насмешил меня
grizlik78, я как раз в курсе, а ты демонстрируешь полное незнание того о чём я написал выше, не обижайся я констатирую пока что факты
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
13.06.2012, 11:39 #12

Не по теме:

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


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

Не по теме:

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

0
13.06.2012, 12:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 12:04
Привет! Вот еще темы с ответами:

Найти ошибку в программе. Приближенное вычисление косинуса - C++
Писал вот такую программу для приближенного вычисления косинуса через ряды, в принципе только для того что бы разобраться с функциями. Но...

Приближенное вычисление корня n-ой степени, в чем ошибка? - C++
#include &lt;cmath&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; main() { float x,x1,e,y,y1,p;y1=1; cout &lt;&lt; &quot;Введите степень точности...

В чем может быть ошибка. Расстояние между вершинами дерева - C++
Входные данные: Первая строка содержит количество вершин в дереве n(1&lt;=n&lt;=500000). Вершины имеют значения от 0 до n-1. В следующих n-1...

Найти угол между векторами - C++
У меня есть координаты конца вектора. Я вроде норм нахожу долготу вектора, но не как не пойму как мне найти угол между ним, что бы он...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.