Постановка задачи:
Определить, имеют ли два заданных прямоугольника на плоскости общую область.
(При любом расположении прямоугольников и под разными углами).
Работа содержит:
- Отчёт по лабораторной работе;
- Код программы + комментарии.
- Проект в Visual Studio(С++).
Отчёт по лабораторной работе содержит:
- Постановка задачи;
- Исходные данные, подаваемые программе;
- Особые ситуации;
- Математические методы и алгоритмы решения задачи;
- Форматы представления данных в программе;
- Структура программы;
- Описание хода выполнения лабораторной работы;
- Исходный код программы.
Общий алгоритм выполнения программмы:
- Прогрмма запрашивает диагональные точки(x,y) прямоугольников (недостающие точки достраиваются);
- Для каждого прямоугольника предоставляется выбрать вариант вращения (относительно центра самого прямоугольника или указанных координат).
- На экран выводятся конечные точки прямоугольников и результат: имеют ли прямоугольники пересеченеие.
Часть кода:
// Поворот точек прямоугольника; // Параметры: &rec - ссылка на объект типа Rectangle, cx, cy - относительно каких координат осуществлять поворот, // alpha - угол поворота; void move_point(Rectangle &rec, double cx, double cy, double alpha) { const double Radian = alpha * M_PI / 180.0; // Значение угла в радианах // Для промежуточных расчётов Point p1_temp = rec.p1; Point p2_temp = rec.p2; Point p3_temp = rec.p3; Point p4_temp = rec.p4; rec.p1 = Point( RoundTo(cos(Radian)*(p1_temp.x - cx) - sin(Radian)*(p1_temp.y - cy) + cx, 2), RoundTo(sin(Radian)*(p1_temp.x - cx) + cos(Radian)*(p1_temp.y - cy) + cy, 2) ); rec.p2 = Point( RoundTo(cos(Radian)*(p2_temp.x - cx) - sin(Radian)*(p2_temp.y - cy) + cx, 2), RoundTo(sin(Radian)*(p2_temp.x - cx) + cos(Radian)*(p2_temp.y - cy) + cy, 2) ); rec.p3 = Point( RoundTo(cos(Radian)*(p3_temp.x - cx) - sin(Radian)*(p3_temp.y - cy) + cx, 2), RoundTo(sin(Radian)*(p3_temp.x - cx) + cos(Radian)*(p3_temp.y - cy) + cy, 2) ); rec.p4 = Point( RoundTo(cos(Radian)*(p4_temp.x - cx) - sin(Radian)*(p4_temp.y - cy) + cx, 2), RoundTo(sin(Radian)*(p4_temp.x - cx) + cos(Radian)*(p4_temp.y - cy) + cy, 2) ); }
kostyaLem