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

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

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

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

09.12.2012, 21:54. Просмотров 1579. Ответов 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 ;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 21:54     Полярные координаты
Посмотрите здесь:

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

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

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

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

Координаты в C++ - C++
В Pascal есть модуль Graph с помощью которого всё что мне нужно можно легко сделать. А именно заставить двигаться что-нибудь по...

координаты x y - C++
у меня dev c++ можно ли конкретно задать точку откуда будет идти надпись.например я хочу написать &quot;привет народ&quot; только не в начале а...

координаты - C++
Подскажите как при помощи Си в консоле двигать элементы, например слово какое то вывести в центре?

координаты - C++
Создайте класс который принимает координаты (долгота, широта). Создайте наследника этого класса который принимает название города....

координаты - C++
Подскажите, пожалуйста, как реализовать: 1) поиск точек отрезков прямых линий на плоскости XY, которые имеют обе целочисленные...

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

Координаты точки - C++
Решить задачу, используя структуру point для хранения координат точки: Найти такую точку, сумма расстояний от которой до остальных точек...

Координаты n-угольника - C++
По какой формуле можно вычислить координаты правильного n-угольника, вписанного в круг? Даны координаты центра круга и радиус.


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sublimee
7 / 7 / 0
Регистрация: 14.11.2012
Сообщений: 70
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?
Sublimee
7 / 7 / 0
Регистрация: 14.11.2012
Сообщений: 70
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 ;
}
Всем спасибо. Все свободны.
Sublimee
7 / 7 / 0
Регистрация: 14.11.2012
Сообщений: 70
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 ;
}
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.12.2012, 22:38     Полярные координаты #5
Прям эволюция идеи).
Yandex
Объявления
21.12.2012, 22:38     Полярные координаты
Ответ Создать тему
Опции темы

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