Построить новый прямоугольник, являющийся пересечением двух исходных - C (СИ)
Формулировка задачи:
Задание
: Даны два прямоугольника на плоскости, которые задаются координатами противоположных вершин. Написать функцию на языке Си, которая строит новый прямоугольник, являющийся пересечением этих двух прямоугольников, и программу для её тестирования. Программа печатает координаты вершин результирующего прямоугольника. Не прошу решать полностью, но пару подсказок не помешает:1. Как организовать процесс ввода грамотно? 2.Насчёт противоположных вершин не до конца понял.
Заранее благодаренРешение задачи: «Построить новый прямоугольник, являющийся пересечением двух исходных»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
struct box{
int maxx, maxy;
int minx, miny;
};
int intersection(struct box a, struct box b, struct box *result){
result->maxx=(a.maxx<b.maxx)?a.maxx:b.maxx;
result->maxy=(a.maxy<b.maxy)?a.maxy:b.maxy;
result->minx=(a.minx>b.minx)?a.minx:b.minx;
result->miny=(a.miny>b.miny)?a.miny:b.miny;
return ((result->maxx)>(result->minx))&&((result->maxy)>(result->miny));
}
int main()
{
struct box a, b, c;
int temp;
printf("Input coordimates of 1st rect!\n");
printf("Input xA: "); scanf("%d", &(a.maxx));
printf("Input yA: "); scanf("%d", &(a.maxy));
printf("Input xB: "); scanf("%d", &(a.minx));
printf("Input yB: "); scanf("%d", &(a.miny));
if (a.maxx<a.minx){
temp=a.maxx;
a.maxx=a.minx;
a.minx=temp;
}
if (b.maxx<b.minx){
temp=b.maxx;
b.maxx=b.minx;
b.minx=temp;
}
if (a.maxy<a.miny){
temp=a.maxy;
a.maxy=a.miny;
a.miny=temp;
}
if (b.maxx<b.minx){
temp=b.maxy;
b.maxy=b.miny;
b.miny=temp;
}
if (intersection(a, b, &c)){
printf("intersection result is {(%d:%d), (%d:%d)}\n", c.minx, c.miny, c.maxx, c.maxy);
}
else{
printf("no intersection");
}
system("pause");
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h и stdlib.h
- Объявляется структура box, которая содержит координаты прямоугольника: maxx, maxy, minx, miny.
- Определяется функция intersection, которая выполняет пересечение двух прямоугольников и сохраняет результат в третьем прямоугольнике result.
- В функции main() создаются три структуры box: a, b и c. Третья структура c будет содержать результат пересечения.
- Пользователю предлагается ввести координаты прямоугольника a.
- Если введенные координаты прямоугольника a некорректны (то есть, его стороны пересекаются), то они инвертируются с помощью временной переменной temp.
- Аналогично проверяются и инвертируются координаты прямоугольника b.
- Если прямоугольники a и b пересекаются, то вызывается функция intersection, которая сохраняет результат в структуре c.
- Если прямоугольники не пересекаются, то выводится сообщение об этом.
- Выводится результат пересечения прямоугольников в формате {(x1,y1), (x2,y2)}
- Программа ожидает нажатия клавиши для продолжения работы.
- Возвращается 0, что означает успешный конец работы программы.