В этой задаче необходимо реализовать набор классов для решения геометрических задач на плоскости. Все координаты предполагаются целочисленными. Vector Реализовать класс Vector для вектора на плоскости с необходимыми арифметическими операциями (унарные и
- Геометрия
Условие:
В этой задаче необходимо реализовать набор классов для решения геометрических задач на плоскости. Все координаты предполагаются целочисленными.
Vector
Реализовать класс Vector для вектора на плоскости с необходимыми арифметическими операциями (унарные и бинарные +/-, умножение/деление на скаляр, присваивающие версии операций, сравнение на равенство).
Shape
Создать набор классов-фигур, которые наследуются от абстрактного базового класса IShape для работы с двумерными геометрическими примитивами:
Point (точка);
Segment (отрезок);
Line (линия);
Ray (луч);
Polygon (простой многоугольник - часть плоскости, ограниченная замкнутой ломаной без самопересечений);
Circle (окружность).
В базовом классе IShape предусмотреть чисто виртуальные методы:
Move(const Vector&) - сдвига на заданный вектор, метод должен изменять состояние объекта и возвращать ссылку на сам объект;
ContainsPoint(const Point&) - проверка (true/false) содержит ли фигура (внутренность фигуры) точку;
CrossesSegment(const Segment&) проверка (true/false) пересекается ли фигура (граница фигуры) с отрезком;
Clone() - копирование объекта (необходимо вернуть умный или обычный указатель на копию фигуры);
ToString() - строковое представление фигуры (формат см. в примерах).
В производных классах - реализовать эти методы. Разность двух точек должна возвращать вектор перемещения одной точки в другую.
Детали
Все классы должны располагаться в пространстве имен geometry.
С публичным интерфейсом классов, который используется в задаче, подробнее можно ознакомиться в файле geometrymain.cpp. В частности, Point должен уметь конструироваться от двух целых чисел, Segment, Line и Ray - от двух Point, многоугольник - от std::vector<Point>, окружность - от центра (Point) и радиуса (int).
Объявления классов расположите в соответствующих .h файлах, а необходимые файлы реализации положите в папку src.
Алгоритмическое обоснование и как именно лучше всего считать можно найти в презентации.
Решение:
Для решения данной задачи мы создадим набор классов в пространстве имен geometry, которые будут представлять векторы и геометрические фигуры. Мы начнем с реализации класса Vector, а затем перейдем к абстрактному классу IShape и его производным классам.
1. Реализация класса Vector:
- Класс будет содержать координаты вектора (x и y).
- Реализуем необходимые арифметические операции: сложение, вычитание, умножение и деление на скаляр.
- Реализуем операторы сравнения для проверки равенства.
Похожие задачи
Не нашел нужную задачу?
Воспользуйся поиском
Выбери предмет
- Правоохранительные органы
- Пожарная безопасность
- Парикмахерское искусство
- Природообустройство и водопользование
- Почвоведение
- Приборостроение и оптотехника
- Промышленный маркетинг и менеджмент
- Производственный маркетинг и менеджмент
- Процессы и аппараты
- Программирование
- Право и юриспруденция
- Психология
- Политология
- Педагогика
- Трудовое право
- Теория государства и права (ТГП)
- Таможенное право
- Теория игр
- Текстильная промышленность
- Теория вероятностей
- Теоретическая механика
- Теория управления
- Технология продовольственных продуктов и товаров
- Технологические машины и оборудование
- Теплоэнергетика и теплотехника
- Туризм
- Товароведение
- Таможенное дело
- Торговое дело
- Теория машин и механизмов
- Транспортные средства