Решение геометрической задачи на языке С. Пример решения геометрической задачи с использованием объектов. Пример решения геометрической задачи с использованием объектов
Скачать 22.32 Kb.
|
Пример решения геометрической задачи с использованием объектов // ------------------------------------------------------------- // point.h Класс "Точка" // ------------------------------------------------------------- class Point { public: double x, y; // координаты точки Point(void); Point(double X, double Y); // конструктор класса double getX(); // чтение поля X double getY(); // чтение поля Y }; // ------------------------------------------------------------- // point.cpp Методы класса "Точка" // ------------------------------------------------------------- Point::Point(void) { x = 1; y = 1; } // конструктор: точка задается своими координатами Point::Point(double X, double Y) { x = X; y = Y; } // прочитать координату Х double Point::getX() { return x; } // прочитать координату У double Point::getY() { return y; } // ------------------------------------------------------------- // circle.h Класс "Окружность" // ------------------------------------------------------------- #include "point.h" class Circle { Point center; // центр окружности double r; // радиус окружности public: Circle(Point Center, double R); // Конструктор класса Point getCenter(); // Чтение поля Center double getR(); // Чтение поля R }; // ------------------------------------------------------------- // cirle.cpp Методы класса "Окружность" // ------------------------------------------------------------- #include "point.h" #include "circle.h" // конструктор: окружность задается центром и радиусом Circle::Circle(Point Center, double R) :center(Center) { r = R; } // прочитать центр окружности Point Circle::getCenter() { return center; } // прочитать радиус окружности double Circle::getR() { return r; } // ------------------------------------------------------------- // line.h Класс "Прямая" // ------------------------------------------------------------- #include "point.h" class Line { double A, B, C; // коэфициенты прямой public: Line(double a, double b, double c); // конструктор класса Line(Point p1, Point p2); // еще один конструктор Point getIntersect(Line line); // найти точку пересечения с заданной прямой Line getPerpendicular(Point p); // найти перпендикулярную прямую, // проходящую через заданную точку }; // ------------------------------------------------------------- // line.cpp Методы класса "Прямая" // ------------------------------------------------------------- #include "point.h" #include "line.h" // конструктор: прямая задается своими коэффициентами Line::Line(double a, double b, double c) { A = a; B = b; C = c; } // конструктор: прямая, которая проходит через две заданные точки Line::Line(Point p1, Point p2) { A = p2.getY() - p1.getY(); B = p1.getX() - p2.getX(); C = -A * p1.getX() - B * p1.getY(); } A(0,0) B (2,2) A=2-0=2 B=-2 P1=C(x3,y3) 2 = p2.getY() - p1.getY(); P2.Y = p1.getY()+A; P2.X = p1.getX()-B; -2 = p1.getX() - p2.getX(); // найти точку пересечения с заданной прямой Point Line::getIntersect(Line line) { double d = A * line.B - B * line.A, d1 = -(C * line.B - B * line.C), d2 = -(A * line.C - C * line.A); return Point(d1 / d, d2 / d); } // построить перпендикулярную прямую, проходящую через заданную точку Line Line::getPerpendicular(Point p) { return Line(B, -A, -B * p.getX() + A * p.getY()); } // ------------------------------------------------------------- // segment.h Класс "Отрезок"// ------------------------------------------------------------- #include "point.h" class Segment { double x1, y1, x2, y2; // координаты концов отрезка public: Segment(Point p1, Point p2); // конструктор класса Point getMidpoint(); // найти середину отрезка double getLength(); // найти длину отрезка }; // ------------------------------------------------------------- // segment.cpp Методы класса "Отрезок" // ------------------------------------------------------------- #include "point.h" #include "segment.h" #include "math.h" // конструктор: отрезок задается двумя точками Segment::Segment(Point p1, Point p2) { x1 = p1.getX(); y1 = p1.getY(); x2 = p2.getX(); y2 = p2.getY(); } // найти середину отрезка Point Segment::getMidpoint() { return Point((x1 + x2) / 2, (y1 + y2) / 2); } // найти длину отрезка double Segment::getLength() { return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2)); } // ------------------------------------------------------------- // main.cpp точка входа в проект // ------------------------------------------------------------- #include #include #include "point.h" #include "circle.h" #include "line.h" #include "segment.h" using std::endl; using std::cout; using std::cin; int main() { SetConsoleOutputCP(1251); // ----- ввод исходных данных ----- double x1, y1, x2, y2, x3, y3; cout << "ведите координаты первой точки ===> "; cin >> x1 >> y1; cout << "ведите координаты второй точки ===> "; cin >> x2 >> y2; cout << "ведите координаты третьей точки ==> "; cin >> x3 >> y3; // ----- создание точек - вершин треугольника ----- Point A = Point(x1, y1), B = Point(x2, y2), C = Point(x3, y3); // ----- создание отрезков - сторон треугольника ----- Segment Otrezok1 = Segment(A, B), Otrezok2 = Segment(B, C); // ----- создание точек - середин сторон треугольника ----- Point S1 = Otrezok1.getMidpoint(), S2 = Otrezok2.getMidpoint(); // ----- создание пр¤мых, проход¤щих через стороны треугольника ----- Line line1 = Line(A, B), line2 = Line(B, C), // ----- ... и серединных перпендикул¤ров к этим сторонам ... ----- midperpendicular1 = line1.getPerpendicular(S1), midperpendicular2 = line2.getPerpendicular(S2); // ----- нахождение точки пересечени¤ серединных перпендикул¤ров ----- Point O = midperpendicular1.getIntersect(midperpendicular2); // ----- создание отрезка - радиуса ----- Segment Radius = Segment(O, A); // ----- создание окружности с заданным центром и радиусом ----- Circle circle = Circle(O, Radius.getLength()); // ----- вывод результата ----- cout << "радиус окружности" << circle.getR() << endl << "координаты центра (" << circle.getCenter().getX() << " ; " << circle.getCenter().getY() << ")" ; system("pause"); return 0; } |