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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Sublimee
7 / 7 / 0
Регистрация: 14.11.2012
Сообщений: 73
#1

Полярные координаты - C++

09.12.2012, 21:54. Просмотров 1672. Ответов 4
Метки нет (Все метки)

Прошу помощи. В интернете ничего стоящего по этой теме не нашёл. Задача собственно такова:
Написать класс PolarCoordinates, представляющий собой класс координат точки на плоскости, выраженный в виде своих полярных координат (радиуса и угла в радианах).

Конструктор класса должен принимать два целых числа (int), либо одно целое число, либо не принимать параметров (в таком случае его значение принимается равным (0,0)).
Класс должен обладать следующими методами:
int r() -- радиус;
int phi() -- угол;
int x() -- декартова координата x;
int y() -- декартова координата y;
int distance(const PolarCoordinates&) -- расстояние до заданной точки;

Для класса должны быть перегружены следующие операторы:
>>
<<
+, +=
-, -=

Семантика операторов должна быть схожей с соответствующей семантикой операторов для int, причем сложение выполняется по принципу сложения векторов, а вычитание - по принципу вычитания векторов соответственно.
Мне не совсем понятны методы класса, поэтому может показаться полным бредом то, что я написал. Мне кажется, что писал я не то, что нужно:

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
//Файл Polarization.h
// Предотвращение многократного включения данного файла
#ifndef _Polarization_h
#define _Polarization_h
 
 
    #include <iostream>  // Для ввода-вывода
    #include <stdlib.h>  // Для exit( )
    #include <math.h>
    using namespace std ;
 
    class POLARIZATION
    {
        int i ;
        int x ;         // декартова координата x
        int y ;         // декартова координата y
        int r ;         // радиус
        int phi ;       // угол
    
        // Функция преобразования
        
 
    public:
        void convert () ;
        // Конструктор по умолчанию
        POLARIZATION () ;
        // Конструктор из x
        POLARIZATION ( int koord ) ;
        // Конструктор из x и y
        POLARIZATION ( int koord1 , int koord2 ) ;
 
        // Ввод и вывод
        friend istream& operator >> ( istream& in , POLARIZATION& r ) ;
        friend ostream& operator << ( ostream& out , const POLARIZATION& r ) ;
 
    };
 
#endif
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//Файл Polarization.cpp
#include "Polarization.h"
 
POLARIZATION::POLARIZATION ()
{
   x = 0 ;
   y = 0 ;
   i = 0 ;
}
 
POLARIZATION::POLARIZATION ( int koord )
{
   x = koord ;
   y = 0 ;
   i = 0 ;
}
 
POLARIZATION::POLARIZATION ( int koord1 , int koord2 )
{
   x = koord1 ;
   y = koord2 ;
   i = 0;
}
 
void POLARIZATION::convert()
{
    r=sqrt ( x * x + y * y );
    if ( ( x > 0 ) && ( y >= 0 ) )
    {
        phi = atan ( y / x ) ;
        i ++ ;
    }
 
    if ( ( x > 0 ) && ( y < 0 ) )
    {
        phi = atan ( y / x ) + 1 ;
        i ++ ;
 
    }
    if ( x < 0 )
    {
        phi = atan ( y / x ) + 0.5 ;
        i ++ ;
 
    }
    if ( ( x = 0 ) && ( y > 0 ) )
    {
        phi = 0.25 ;
        i ++ ;
 
    }
    if ( ( x = 0 ) && ( y < 0 ) )
    {
        phi = 1.5 ;
        i ++ ;
    }
    if ( ( x = 0 ) && ( y = 0 ) )
    {
        phi = 0 ;
        i ++ ;
 
    }
 
}
 
 
istream& operator >> ( istream& in, POLARIZATION& r )
{
   in >> r.x >> r.y ;
   return in ;
}
 
ostream& operator << ( ostream& out, const POLARIZATION& r )
{
    if ( r.i == 0 )
    {
        out << r.x << " " << r.y ;
        return out ;
    }
    else
    {
        out << r.r << " " << r.phi ;
        return out ;
    }
}
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
//Файл main.cpp
#include "Polarization.h"
 
int main ( void )
{
    // точка создаётся при помощи 1 конструктора
    POLARIZATION point1 ;
    // значение координат до преобразования
    cout << "Before: " << point1 << endl ;
    // преобразование координат
    point1.convert () ;
    // значение координат после преобразования
    cout << "After: " << point1 << endl ;
 
    // точка создаётся при помощи 2 конструктора
    POLARIZATION point2 (5) ;
    // значение координат до преобразования
    cout << "Before: " << point2 << endl ;
    // преобразование координат
    point2.convert () ;
    // значение координат после преобразования
    cout << "After: " << point2 << endl ;
 
    // точка создаётся при помощи 3 конструктора
    POLARIZATION point3 (4,7) ;
    // значение координат до преобразования
    cout << "Before: " << point3 << endl ;
    // преобразование координат
    point3.convert () ;
    // значение координат после преобразования
    cout << "After: " << point3 << endl;
 
    // точку создаёт пользователь
    cout << "Set x & y in decart:" << endl ;
    POLARIZATION mypoint ;
    cin >> mypoint ;
    // значение координат до преобразования
    cout << "Before: " << mypoint << endl ;
    // преобразование координат
    mypoint.convert () ;
    // значение координат после преобразования
    cout << "After: " << mypoint << endl ;
    
   return 0 ;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 21:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Полярные координаты (C++):

Определить полярные координаты точки - C++
Определить полярные координаты точки,заданной координатами x,y в прямоугольных координатах по формулам : (p=arctgyyjx), r=yx2+y2. При...

Определить полярные координаты точки, заданной координатами х, у в прямоугольных координатах по формулам:  - C++
Здравствуйте, помогите пожалуйста решить задачку. Определить полярные координаты точки, заданной координатами х, у в прямоугольных...

Класс "Полярные координаты" - C++
Нужно создать класс Polar , который можно использовать для хранения полярных координат ( радиуса и угла ) . Перегрузите операцию + для...

Даны координаты вершин треугольника и координаты некоторой точки внутри него - C++
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...

Заданы координаты трех вершин прямоугольника, необходимо определить координаты четвертой вершины - C++
Заданы координаты трех вершин прямоугольника. Необходимо определить координаты четвертой вершины. Можете найти? Добавлено через 1...

Даны координаты точек х1, у1, ... х15, у15. Если точка попадает на плоскость, ограниченную кругом x2 + y2 = R2 - вывести ее координаты - C++
Лабораторная работа 5. Одномерные массивы * * Для задач этого раздела необходимо составить графический алгоритм, провести...

4
Sublimee
7 / 7 / 0
Регистрация: 14.11.2012
Сообщений: 73
15.12.2012, 22:35  [ТС] #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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Файл Polarization.h
// Предотвращение многократного включения данного файла
#ifndef _Polarization_h
#define _Polarization_h
 
 
    #include <iostream>  // Для ввода-вывода
    #include <stdlib.h>  // Для exit( )
    #include <math.h>
    using namespace std ;
 
    class PolarCoordinates
    {
        double r ;          // радиус
        double phi ;        // угол
        double x;           // x
        double y;           // y
        void set_x () { x = r * cos(phi) ; }
        void set_y () { y = r * sin(phi) ; }
 
    public:
 
        // Конструктор по умолчанию
        PolarCoordinates () ;
        // Конструктор из r
        PolarCoordinates ( double radius ) ;
        // Конструктор из r и phi
        PolarCoordinates ( double radius , double ygol ) ;
 
        int get_x ();
        int get_r ();
        int get_phi ();
        int get_y ();
        
        // Ввод и вывод
        friend istream& operator >> ( istream& in , PolarCoordinates& r ) ;
        friend ostream& operator << ( ostream& out , const PolarCoordinates& r ) ;
 
    };
 
#endif
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
 // Файл main.cpp
#include "Polarization.h"
 
int main ( void )
{
    // точка создаётся при помощи 1 конструктора
    PolarCoordinates point1 ;
    // полярные значения координат
    cout << "Polar point1: " << endl << endl ;
    cout << "r=" << point1.get_r () << " phi=" << point1.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point1: " << endl << endl ;
    cout << "x=" << point1.get_x () << " y=" << point1.get_y () << endl << endl ;
 
    // точка создаётся при помощи 2 конструктора
    PolarCoordinates point2 (1) ;
    // полярные значения координат
    cout << "Polar point2: " << endl << endl ;
    cout << "r=" << point2.get_r () << " phi=" << point2.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point2: " << endl << endl ;
    cout << "x=" << point2.get_x () << " y=" << point2.get_y() << endl << endl ;
 
    // точка создаётся при помощи 3 конструктора
    PolarCoordinates point3 (4,5) ;
    // полярные значения координат
    cout << "Polar point3: " << endl << endl ;
    cout << "r=" << point3.get_r () << " phi=" << point3.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point3: " << endl << endl ;
    cout << "x=" << point3.get_x () << " y=" << point3.get_y() << endl << endl ;
 
    // точку создаёт пользователь
    cout << "Set r & phi in polar: " ;
    PolarCoordinates mypoint ;
    cin >> mypoint ;
    // полярные значения координат
    cout << "Polar mypoint: " << endl << endl ;
    cout << "r=" << mypoint.get_r () << " phi=" << mypoint.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart mypoint: " << endl << endl ;
    cout << "x=" << mypoint.get_x () << " y=" << mypoint.get_y() << endl << endl ;
    
   return 0 ;
}
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
55
56
57
58
59
 //Файл Polarization.cpp
#include "Polarization.h"
 
PolarCoordinates::PolarCoordinates ()
{
    r = 0 ;
    phi = 0 ;
    set_x ();
    set_y ();
}
 
PolarCoordinates::PolarCoordinates ( double radius )
{
    r = radius ;
    phi = 0 ;
    set_x () ;
    set_y () ;
}
 
PolarCoordinates::PolarCoordinates ( double radius , double ygol )
{
    r = radius ;
    phi = ygol ;
    set_x () ;
    set_y () ;
}
 
int PolarCoordinates::get_x () 
{
    return x ;
}
int PolarCoordinates::get_y ()
{
    return y ;
}
int PolarCoordinates::get_r ()
{
    return r ;
}
int PolarCoordinates::get_phi () 
{
    return phi ;
}
 
istream& operator >> ( istream& cin, PolarCoordinates& r )
{
   cin >> r.r >> r.phi ;
   r=r.r;
 
   return cin ;
}
 
ostream& operator << ( ostream& out, const PolarCoordinates& r )
{
    
        out << r.x << " " << r.y ;
        return out ;
    
}
Перегруженная оперция >> принимает значения r и phi, но как их перевести к x и y?
0
Sublimee
7 / 7 / 0
Регистрация: 14.11.2012
Сообщений: 73
19.12.2012, 16:59  [ТС] #3
Было решено не хранить полярные и декартовые значения координат для объекта, а ограничиться только полярными, что мне кажется более логичным.
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
// Файл Polarization.h
// Предотвращение многократного включения данного файла
#ifndef _Polarization_h
#define _Polarization_h
 
 
    #include <iostream>  // Для ввода-вывода
    #include <math.h>
    using namespace std ;
    #define M_PI 3.14159265358979323846
    class PolarCoordinates
    {
        double r ;          // радиус
        double phi ;        // угол
        //double x;         // x
        //double y;         // y
        //void set_x () { x = r * cos(phi) ; }
        //void set_y () { y = r * sin(phi) ; }
 
    public:
 
        PolarCoordinates operator + ( PolarCoordinates& h ) ;
        PolarCoordinates& operator += ( PolarCoordinates& h ) ;
        PolarCoordinates operator - ( PolarCoordinates& h ) ;
        PolarCoordinates& operator -= ( PolarCoordinates& h ) ;
        // Конструктор копирования
        PolarCoordinates ( const PolarCoordinates& a ) ;
        // Конструктор по умолчанию
        PolarCoordinates () ;
        // Конструктор из r
        PolarCoordinates ( double radius ) ;
        // Конструктор из r и phi
        PolarCoordinates ( double radius , double ygol ) ;
        //void convert ( PolarCoordinates& r ) ;
        //double distance ( PolarCoordinates& my, PolarCoordinates& next) ;
        double get_x () ;
        double get_r () ;
        double get_phi () ;
        double get_y () ;
        double distance ( PolarCoordinates& my ) ;
        // Ввод и вывод
        friend istream& operator >> ( istream& in , PolarCoordinates& r ) ;
        friend ostream& operator << ( ostream& out , const PolarCoordinates& r ) ;
 
    };
 
#endif
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
// Файл Polarization.cpp
#include "Polarization.h"
 
PolarCoordinates PolarCoordinates::operator + ( PolarCoordinates& h )
{
    PolarCoordinates temp(*this);
    temp += h;
    return temp;
}
PolarCoordinates& PolarCoordinates::operator += ( PolarCoordinates& h )
{
    double x = get_x () + h.get_x () ;
    double y = get_y () + h.get_y () ;
    r = sqrt ( x * x + y * y ) ;
    
    if ( r == 0 ) 
    {
        phi = 0 ;
    }
 
    if ( ( x > 0 ) && ( y >= 0 ) )
    {
        phi = atan ( x / y ) ;
    }
 
    if ( ( x > 0 ) && ( y < 0 ) )
    {
        phi = atan ( x / y ) + 2 * M_PI ;
    }
    if ( ( x < 0 ) && ( y < 0 ) )
    {
        phi = atan ( x / y ) + M_PI ;
    }
    
    if ( ( x == 0 ) && ( y > 0 ) )
    {
        phi = M_PI / 2 ;
    }
    
    if ( ( x == 0 ) && ( y < 0 ) )
    {
        phi = (  M_PI ) / 2 ;
    }
 
    if ( ( x == 0 ) && ( y == 0 ) )
    {
        phi = 0 ;
    }
 
    return *this;
}
PolarCoordinates PolarCoordinates::operator - ( PolarCoordinates& h )
{
    PolarCoordinates temp(*this);
    temp -= h;
    return temp;
}
PolarCoordinates& PolarCoordinates::operator -= ( PolarCoordinates& h )
{
    double x = get_x () - h.get_x () ;
    double y = get_y () - h.get_y () ;
 
    r = sqrt ( x * x + y * y ) ;
    
    if ( r == 0 ) 
    {
        phi = 0 ;
    }
 
    if ( ( x > 0 ) && ( y >= 0 ) )
    {
        phi = atan ( x / y ) ;
    }
 
    if ( ( x > 0 ) && ( y < 0 ) )
    {
        phi = atan ( x / y ) + 2 * M_PI ;
    }
    if ( ( x < 0 ) && ( y < 0 ) )
    {
        phi = atan ( x / y ) + M_PI ;
    }
    
    if ( ( x == 0 ) && ( y > 0 ) )
    {
        phi = M_PI / 2 ;
    }
    
    if ( ( x == 0 ) && ( y < 0 ) )
    {
        phi = (  M_PI ) / 2 ;
    }
 
    if ( ( x == 0 ) && ( y == 0 ) )
    {
        phi = 0 ;
    }
 
    return *this;
}
PolarCoordinates::PolarCoordinates (const PolarCoordinates& a)
{
    r=a.r;
    phi=a.phi;
}
PolarCoordinates::PolarCoordinates ()
{
    r = 0 ;
    phi = 0 ;
}
 
PolarCoordinates::PolarCoordinates ( double radius )
{
    r = radius ;
    phi = 0 ;
}
 
PolarCoordinates::PolarCoordinates ( double radius , double ygol )
{
    r = radius ;
    phi = ygol ;
}
 
double PolarCoordinates::get_x () 
{
    return r * cos(phi) ;
}
 
double PolarCoordinates::get_y ()
{
    return r * sin(phi) ;
}
 
double PolarCoordinates::get_r ()
{
    return r ;
}
 
double PolarCoordinates::get_phi () 
{
    return phi ;
}
 
double PolarCoordinates::distance (PolarCoordinates& my)
{
    return ( sqrt ( (r * cos(phi)-my.r * cos(my.phi) ) * ( r * cos(phi) - my.r * cos(my.phi) ) +
        ( r * sin(phi)- my.r * sin(my.phi) ) * ( r * sin(phi) - my.r * sin(my.phi)) ) ) ;
}
 
istream& operator >> ( istream& cin, PolarCoordinates& r )
{
    cin >> r.r >> r.phi ;
    //r.set_x();
    //r.set_y();
    return cin ;
}
 
ostream& operator << ( ostream& out, const PolarCoordinates& r )
{
        out << r.r << " " << r.phi;
        return out ;
}
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 //Файл main.cpp
#include "Polarization.h"
 
int main ( void )
{
    // точка создаётся при помощи 1 конструктора
    PolarCoordinates point1 ;
    // полярные значения координат
    cout << "Polar point1: " << endl << endl ;
    cout << "r=" << point1.get_r () << " phi=" << point1.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point1: " << endl << endl ;
    cout << "x=" << point1.get_x () << " y=" << point1.get_y () << endl << endl ;
 
    // точка создаётся при помощи 2 конструктора
    PolarCoordinates point2 (1) ;
    // полярные значения координат
    cout << "Polar point2: " << endl << endl ;
    cout << "r=" << point2.get_r () << " phi=" << point2.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point2: " << endl << endl ;
    cout << "x=" << point2.get_x () << " y=" << point2.get_y() << endl << endl ;
 
    // точка создаётся при помощи 3 конструктора
    PolarCoordinates point3 (4,5) ;
    // полярные значения координат
    cout << "Polar point3: " << endl << endl ;
    cout << "r=" << point3.get_r () << " phi=" << point3.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point3: " << endl << endl ;
    cout << "x=" << point3.get_x () << " y=" << point3.get_y() << endl << endl ;
 
    // точку создаёт пользователь
    cout << "Set r & phi in polar: " ;
    PolarCoordinates mypoint ;
    cin >> mypoint ;
    cout << endl ;
    // полярные значения координат
    cout << "Polar mypoint: " << endl << endl ;
    cout << "r=" << mypoint.get_r () << " phi=" << mypoint.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart mypoint: " << endl << endl ;
    //mypoint.convert  (mypoint);
    cout << "x=" << mypoint.get_x () << " y=" << mypoint.get_y() << endl << endl ;
    
    // пользователь задаёт координаты точки, расстояние до которой необходимо найти
    cout << "Set r & phi in polar: ";
    PolarCoordinates nextpoint ;
    cin >> nextpoint ;
    cout << endl ;
    // полярные значения координат
    cout << "Polar nextpoint: " << endl << endl ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart nextpoint: " << endl << endl ;
    cout << "x=" << nextpoint.get_x () << " y=" << nextpoint.get_y () << endl << endl ;
 
    // на экран выводится расстояние между точками mypoint и nextpoint
    cout<< "Distance = " << mypoint.distance (nextpoint) << "\n";
 
    // перегруженная операция +
    cout << "nextpoint = nextpoint + mypoint: " << endl << endl ;
    nextpoint = nextpoint + mypoint ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
    // перегруженная операция +=
    cout << "nextpoint += mypoint: " << endl << endl ;
    nextpoint += mypoint ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
    nextpoint = nextpoint - mypoint ;
    // перегруженная операция -
    cout << "nextpoint = nextpoint - mypoint: " << endl << endl ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
    nextpoint -= mypoint ;
    // перегруженная операция -=
    cout << "nextpoint -= mypoint: " << endl << endl ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
 
   return 0 ;
}
Всем спасибо. Все свободны.
0
Sublimee
7 / 7 / 0
Регистрация: 14.11.2012
Сообщений: 73
21.12.2012, 22:35  [ТС] #4
Окончательная программа со всеми правками:
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
// Файл Polarization.h
#ifndef POLARIZATION_H
#define POLARIZATION_H
 
#include <iostream>  // Для ввода-вывода
#include <math.h>
 
#define M_PI 3.14159265358979323846
class PolarCoordinates
{
 
    double r ;          // радиус
    double phi ;        // угол
 
 
public:
 
    PolarCoordinates operator + ( PolarCoordinates& h ) ;     // перегруженный оператор +
    PolarCoordinates& operator += ( PolarCoordinates& h ) ; // перегруженный оператор +=
    PolarCoordinates operator - ( PolarCoordinates& h ) ;     // перегруженный оператор -
    PolarCoordinates& operator -= ( PolarCoordinates& h ) ; // перегруженный оператор -=
    // Конструктор копирования
    PolarCoordinates ( const PolarCoordinates& a ) ;
    // Конструктор по умолчанию
    PolarCoordinates () ;
    // Конструктор из r
    PolarCoordinates ( double radius ) ;
    // Конструктор из r и phi
    PolarCoordinates ( double radius , double ygol ) ;
    
    double get_x () ;
    double get_r () ;
    double get_phi () ;
    double get_y () ;
    double distance ( PolarCoordinates& my ) ;
    // Перегруженные ввод и вывод
    friend std::istream& operator >> ( std::istream& in , PolarCoordinates& r ) ;
    friend std::ostream& operator << ( std::ostream& out , const PolarCoordinates& r ) ;
 
};
 
#endif
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// Файл Polarization.cpp
#include "Polarization.h"
using namespace std;
PolarCoordinates PolarCoordinates::operator + ( PolarCoordinates& h )
{
    PolarCoordinates temp(*this);
    temp += h;
    return temp;
}
PolarCoordinates& PolarCoordinates::operator += ( PolarCoordinates& h )
{
    double x = get_x () + h.get_x () ;
    double y = get_y () + h.get_y () ;
    r = sqrt ( x * x + y * y ) ;
    
    if ( r == 0 ) 
    {
        phi = 0 ;
    }
 
    if ( ( x > 0 ) && ( y >= 0 ) )
    {
        phi = atan ( x / y ) ;
    }
 
    if ( ( x > 0 ) && ( y < 0 ) )
    {
        phi = atan ( x / y ) + 2 * M_PI ;
    }
    if ( ( x < 0 ) && ( y < 0 ) )
    {
        phi = atan ( x / y ) + M_PI ;
    }
    
    if ( ( x == 0 ) && ( y > 0 ) )
    {
        phi = M_PI / 2 ;
    }
    
    if ( ( x == 0 ) && ( y < 0 ) )
    {
        phi = (  M_PI ) / 2 ;
    }
 
    if ( ( x == 0 ) && ( y == 0 ) )
    {
        phi = 0 ;
    }
 
    return *this;
}
PolarCoordinates PolarCoordinates::operator - ( PolarCoordinates& h )
{
    PolarCoordinates temp(*this);
    temp -= h;
    return temp;
}
PolarCoordinates& PolarCoordinates::operator -= ( PolarCoordinates& h )
{
    double x = get_x () - h.get_x () ;
    double y = get_y () - h.get_y () ;
 
    r = sqrt ( x * x + y * y ) ;
    
    if ( r == 0 ) 
    {
        phi = 0 ;
    }
 
    if ( ( x > 0 ) && ( y >= 0 ) )
    {
        phi = atan ( x / y ) ;
    }
 
    if ( ( x > 0 ) && ( y < 0 ) )
    {
        phi = atan ( x / y ) + 2 * M_PI ;
    }
    if ( ( x < 0 ) && ( y < 0 ) )
    {
        phi = atan ( x / y ) + M_PI ;
    }
    
    if ( ( x == 0 ) && ( y > 0 ) )
    {
        phi = M_PI / 2 ;
    }
    
    if ( ( x == 0 ) && ( y < 0 ) )
    {
        phi = (  M_PI ) / 2 ;
    }
 
    if ( ( x == 0 ) && ( y == 0 ) )
    {
        phi = 0 ;
    }
 
    return *this;
}
PolarCoordinates::PolarCoordinates (const PolarCoordinates& a)
{
    r=a.r;
    phi=a.phi;
}
PolarCoordinates::PolarCoordinates ()
{
    r = 0 ;
    phi = 0 ;
}
 
PolarCoordinates::PolarCoordinates ( double radius )
{
    r = radius ;
    phi = 0 ;
}
 
PolarCoordinates::PolarCoordinates ( double radius , double ygol )
{
    r = radius ;
    phi = ygol ;
}
 
double PolarCoordinates::get_x () 
{
    return r * cos(phi) ;
}
 
double PolarCoordinates::get_y ()
{
    return r * sin(phi) ;
}
 
double PolarCoordinates::get_r ()
{
    return r ;
}
 
double PolarCoordinates::get_phi () 
{
    return phi ;
}
 
double PolarCoordinates::distance (PolarCoordinates& my)
{
    return ( sqrt ( (r * cos(phi)-my.r * cos(my.phi) ) * ( r * cos(phi) - my.r * cos(my.phi) ) +
        ( r * sin(phi)- my.r * sin(my.phi) ) * ( r * sin(phi) - my.r * sin(my.phi)) ) ) ;
}
 
istream& operator >> ( istream& cin, PolarCoordinates& r )
{
    cin >> r.r >> r.phi ;
    return cin ;
}
 
ostream& operator << ( ostream& out, const PolarCoordinates& r )
{
    out << r.r << " " << r.phi;
    return out ;
}
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Файл main.cpp
#include "Polarization.h"
using namespace std;
int main ( void )
{
    // точка создаётся при помощи 1 конструктора
    PolarCoordinates point1 ;
    // полярные значения координат
    cout << "Polar point1: " << endl << endl ;
    cout << "r=" << point1.get_r () << " phi=" << point1.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point1: " << endl << endl ;
    cout << "x=" << point1.get_x () << " y=" << point1.get_y () << endl << endl ;
 
    // точка создаётся при помощи 2 конструктора
    PolarCoordinates point2 (1) ;
    // полярные значения координат
    cout << "Polar point2: " << endl << endl ;
    cout << "r=" << point2.get_r () << " phi=" << point2.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point2: " << endl << endl ;
    cout << "x=" << point2.get_x () << " y=" << point2.get_y() << endl << endl ;
 
    // точка создаётся при помощи 3 конструктора
    PolarCoordinates point3 (4,5) ;
    // полярные значения координат
    cout << "Polar point3: " << endl << endl ;
    cout << "r=" << point3.get_r () << " phi=" << point3.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart point3: " << endl << endl ;
    cout << "x=" << point3.get_x () << " y=" << point3.get_y() << endl << endl ;
 
    // точку создаёт пользователь
    cout << "Set r & phi in polar: " ;
    PolarCoordinates mypoint ;
    cin >> mypoint ;
    cout << endl ;
    // полярные значения координат
    cout << "Polar mypoint: " << endl << endl ;
    cout << "r=" << mypoint.get_r () << " phi=" << mypoint.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart mypoint: " << endl << endl ;
    //mypoint.convert  (mypoint);
    cout << "x=" << mypoint.get_x () << " y=" << mypoint.get_y() << endl << endl ;
    
    // пользователь задаёт координаты точки, расстояние до которой необходимо найти
    cout << "Set r & phi in polar: ";
    PolarCoordinates nextpoint ;
    cin >> nextpoint ;
    cout << endl ;
    // полярные значения координат
    cout << "Polar nextpoint: " << endl << endl ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
    // декартовые значения координат
    cout << "Decart nextpoint: " << endl << endl ;
    cout << "x=" << nextpoint.get_x () << " y=" << nextpoint.get_y () << endl << endl ;
 
    // на экран выводится расстояние между точками mypoint и nextpoint
    cout<< "Distance = " << mypoint.distance (nextpoint) << "\n";
 
    // перегруженная операция +
    cout << "nextpoint = nextpoint + mypoint: " << endl << endl ;
    nextpoint = nextpoint + mypoint ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
    // перегруженная операция +=
    cout << "nextpoint += mypoint: " << endl << endl ;
    nextpoint += mypoint ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
    nextpoint = nextpoint - mypoint ;
    // перегруженная операция -
    cout << "nextpoint = nextpoint - mypoint: " << endl << endl ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
    nextpoint -= mypoint ;
    // перегруженная операция -=
    cout << "nextpoint -= mypoint: " << endl << endl ;
    cout << "r=" << nextpoint.get_r () << " phi=" << nextpoint.get_phi () << endl << endl ;
 
    return 0 ;
}
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.12.2012, 22:38 #5
Прям эволюция идеи).
0
21.12.2012, 22:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2012, 22:38
Привет! Вот еще темы с ответами:

Заданы координаты точки подвеса математического маятника A(xa, ya, za) и координаты одной из точек его наивысшего подъема B(xb, yb, zb). Найти координ - C++
помогите написать программу на с++ Добавлено через 37 секунд вот задача:Заданы координаты точки подвеса математического маятника...

Мировые координаты и координаты устройства - C++
Пишу программу с интерфейсом напоминающем Autocad. А точнее ту часть в которой происходит черчение. Т.е. хочу создать поле которое...

Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю) - C++
Даны координаты центра (xc,yc) и радиус R окружности, координаты точки (x,y) вне окружности. Найти точку пересечения одной из касательных с...

площадь треугольника, если известны координаты его углов. Введите координаты углов - C++
Напишите программу, которая вычисляет площадь треугольника, если известны координаты его углов. Введите координаты углов (числа...


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

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

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