Вычисление декартовых координат вершин правильного треугольника
Разработать ООП для вычисления декартовых координат вершин правильного треугольника с заданной длиной стороны, центр которого лежит на оси Х (рисунок 1). Длина стороны треугольника должна передаваться программе через аргумент командной строки, а полученные координаты должны отображаться через стандартный вывод. Программная реализация вычислений должна быть основана на разработке класса точки с приватными полями ее декартовых координат и публичными методами доступа к ним и конструктором инициализации их значений. Кроме того нужно предусмотреть статический метод конструирования точки по ее полярным координатам (программа polar.cc).
Рисунок 1 – К постановке задачи вычисления декартовых координат правильного треугольника
// Программа polar.cc
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
// Класс Point2 точки плоскости
class Point2 {
private:
float x;
float y;
Point2(float _x, float _y) : x(_x), y(_y) { };// приватный конструктор
public:
float getx() { return x; }; // доступ к x
float gety() { return y; }; // доступ к ystatic Point2 Polar(float, float); // именованный конструктор точки - статический метод
Point2() { x=y=0.0; }; // конструктор по умолчанию (для массива точек)
}; // Point2
// конструирование точки по полярным координатам
inline Point2 Point2 :: Polar(float R, float F) {
Point2 p(R*cos(F), R*sin(F)); // перевод полярных координат в декартовы
return p; // возврат объекта класса точки
}; //polar
// основная функция
int main(int argc, char* argv[ ]) {
float edge = 1.0; // сторона треугольника (1.0 – длина по умолчанию)
float angle = 0.0; // полярный угол вершины
float pi; // число pi
pi = acos (-1.0 ); // вычислить pi (можно M_PI из math.h)
float radius; // радиус-вектор вершины
int i = 0; // счетчик вершин треугольника
Point2 vertex [3]; // массив вершин треугольника vertex[0], vertex[1], vertex[2]
if(argc > 1)
edge = atof (argv[1]);// получить длину стороны из командной строки
cout << "pi=" << pi << endl;
radius = edge / (2*sin(pi/3.0)); // радиус описанной окружности
while (i<3) { // цикл вычисления декартовых координат вершин
vertex[ i ] = Point2::Polar(radius, angle);
angle += ((4.0*pi)/3.0); // +120 градусов =4* pi/3
i++;
}// while
do { // Печать декартовых координат вершин в обратном порядке
--i;
cout << vertex[ i ].getx() << ';' << vertex[ i ].gety() << endl;
} while(i > 0); //do- while
return (0); // Корректное завершение программы
}// main
Дата добавления: 2021-07-22; просмотров: 608;