Постановка задачи:
Определить, имеют ли два заданных прямоугольника на плоскости общую область.
(При любом расположении прямоугольников и под разными углами).
Работа содержит:
- Отчёт по лабораторной работе;
- Код программы + комментарии.
- Проект в 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)
);
}
Телеграм
-