Форум программистов, компьютерный форум 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 минуты
Люди!!! Помогите!!! пожалуйста!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
13.06.2012, 14:59     Вычисление косинуса угла между векторами, в чем ошибка #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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <cmath>
#include <iostream>
using namespace std;
 
//ÔóГ*êöèÿ âû÷èñëÿåò äëèГ*Г*Гі âåêòîðГ* a = {ax, ay}
double vector_module(double ax, double ay);
//ÔóГ*êöèÿ âû÷èñëÿåò Г±ГЄГ*ëÿðГ*îå ïðîèçâåäåГ*ГЁГҐ âåêòîðîâ
//a = {ax, ay}, b = {bx, by}
double scalar_mult  (double ax, double ay, double bx, double by);
 
 
int main()
{
    double x11,y11,x12,y12,x21,y21,x22,y22;
    cout<<"\tENTER VECTOR COORDINATES\n";
    cout<<"VECTOR 1 : \n";
    cout<<"BGN x y : ";cin>>x11>>y11;
    cout<<"END x y : ";cin>>x12>>y12;
    cout<<"VECTOR 2 : \n";
    cout<<"BGN x y : ";cin>>x21>>y21;
    cout<<"END x y : ";cin>>x22>>y22;
    //ГЌГ*õîäèì ìîäóëè (äëèГ*Г» âåêòîðîâ)
    double a = vector_module(x12 - x11, y12 - y11);
    double b = vector_module(x22 - x21, y22 - y21);
    cout<<"VECTOR1 LENGTH : "<<a<<endl;
    cout<<"VECTOR2 LENGTH : "<<b<<endl;
    //ГЌГ*õîäèì Г±ГЄГ*ëÿðГ*îå ïðîèçâåäåГ*ГЁГҐ
    double SCALARMULT = scalar_mult
        (
            x12 - x11, y12 - y11, 
            x22 - x21, y22 - y21
        );
    //SCALARMULT = |a|*|b|*cos(angle)
    //cos(angle) = SCALARMULT/|a|*|b| 
    if(a < pow(10,-11))
        cout<<"VECTOR 1 - ZERO-VECTOR\n";
    else
    if(b < pow(10,-11))
        cout<<"VECTOR 2 - ZERO-VECTOR\n";
    else
        cout<<"COS ANGLE : "<<SCALARMULT/a*b<<endl;
    system("pause");
    return 0;
}
 
double vector_module(double ax, double ay)
{
    return sqrt(pow(ax,2.0) + pow(ay,2.0));
}
 
double scalar_mult(double ax, double ay, double bx, double by)
{
    return ax*bx + ay*by;
}
По поводу этого моего выссказывания
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ребята без обид вам обоим жирная пара по геометрии и алгебре
да я поторопился с выводом, с толку сбил код который был ну очень похож на вариант теоремы косинусов. В любом случае предлагаемый сейчас код содержит функции вычисления скалярного произведения и модуля вектора как и требовалось в задании.
На счёт всего остального, к алгоритму решил припаять возможность отличать нулевые вектора, которые в общем то могут ввести предложенный алгоритм в посте 19 к некорректному расчёту
Миниатюры
Вычисление косинуса угла между векторами, в чем ошибка   Вычисление косинуса угла между векторами, в чем ошибка   Вычисление косинуса угла между векторами, в чем ошибка  

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 11:08     Вычисление косинуса угла между векторами, в чем ошибка
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Менчендайзер
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 19
19.06.2012, 11:08  [ТС]     Вычисление косинуса угла между векторами, в чем ошибка #22
спасибо!всё сдал я это задание
Yandex
Объявления
19.06.2012, 11:08     Вычисление косинуса угла между векторами, в чем ошибка
Ответ Создать тему
Опции темы

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