Главная страница

Решение геометрической задачи на языке С. Пример решения геометрической задачи с использованием объектов. Пример решения геометрической задачи с использованием объектов


Скачать 22.32 Kb.
НазваниеПример решения геометрической задачи с использованием объектов
АнкорРешение геометрической задачи на языке С
Дата26.05.2021
Размер22.32 Kb.
Формат файлаdocx
Имя файлаПример решения геометрической задачи с использованием объектов.docx
ТипДокументы
#210071

Пример решения геометрической задачи с использованием объектов

// -------------------------------------------------------------

// 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;

}


написать администратору сайта