Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
Sublimee
7 / 7 / 1
Регистрация: 14.11.2012
Сообщений: 73
19.12.2012, 16:59  [ТС]

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

19.12.2012, 16:59. Просмотров 2052. Ответов 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
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2012, 16:59
Готовые ответы и решения:

Определить полярные координаты точки
Определить полярные координаты точки,заданной координатами x,y в прямоугольных...

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

Класс "Полярные координаты"
Нужно создать класс Polar , который можно использовать для хранения полярных...

Даны координаты вершин треугольника и координаты некоторой точки внутри него
Даны координаты вершин треугольника и координаты некоторой точки внутри него....

Заданы координаты трех вершин прямоугольника, необходимо определить координаты четвертой вершины
Заданы координаты трех вершин прямоугольника. Необходимо определить координаты...

4
Другие темы раздела
C++ Найти количество фигур в матрице http://www.cyberforum.ru/cpp-beginners/thread725424.html
Нужно найти количество фигур в матрице 6х8 фигуры. Фигуры состоят из 1, остальные ячейки 0. Вот пример как выглядит матрица сдесь 5 фигуры. 110011 ...
C++ Сумма максимальных массивов Помогите написать программу, которая бы находила сумму двух максимальных массивов и объясните каждую строчку, был бы очень благодарен. Спасибо. http://www.cyberforum.ru/cpp-beginners/thread725418.html
C++ Ошибка: Левый операнд должен быть левосторонним значением
Здравствуйте, не могу понять, в чем суть ошибки. Ругается на это и подобные выражения best.fio.f=mas.fio.f; Слышал, можно избежать ошибки, используя strcpy... #include<iostream>...
как в файл с динамическим массивом вставить 2 старших байта первого элемента в конец файла,а 2 младших байта в середину файла C++
нужно в файл с динамическим массивом вставить 2 старших байта первого элемента в конец файла,а 2 младших байта в середину файла, но почему то все 4 байта он записывает в конец файла, не могу понять в...
C++ Сформировать файл, в котором хранится информация о... http://www.cyberforum.ru/cpp-beginners/thread725414.html
Люди помогите как написать эту программу в c++?: Сформировать файл, в котором хранится информация о заболеваниях сотрудников: ФИО., Год рождения, заболевания, продолжительность болезни. На его...
C++ определить количество слов в которых одинакова первая и последняя буквы мне нкжно определить количество слов в которых одинакова первая и последняя буквы я попыталась но ничего не получается((( #include <iostream> #include <conio.h> #include <string.h> using... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru