Построить новый прямоугольник, являющийся пересечением двух исходных - 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, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д