Определить взаимное расположение двух заданных прямоугольников (пересекаются, не пересекаются, касаются) - C (СИ)
Формулировка задачи:
Заданы координаты вершин двух прямоугольников. Определить их взаимное расположение: пересекаются, не пересекаются, касаются, принадлежит.
P.S. Я совсем начинающий. Скажите хотя бы как задать прямоугольник.
Решение задачи: «Определить взаимное расположение двух заданных прямоугольников (пересекаются, не пересекаются, касаются)»
textual
Листинг программы
#include<stdio.h>
#include<iostream.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
int main ()
{
setlocale(LC_ALL,"Rus");
int x1, x2, y1, y2;
int k1, k2, l1, l2;
printf("Введите координаты противоположных вершин первого прямоугольника:\n");
printf("x1 = ");scanf("%d", &x1);printf("y1 = ");scanf("%d", &y1);
printf("x2 = ");scanf("%d", &x2);printf("y2 = ");scanf("%d", &y2);
printf("Введите координаты противоположных вершин второго прямоугольника:\n");
printf("x1 = ");scanf("%d", &k1);printf("y1 = ");scanf("%d", &l1);
printf("x2 = ");scanf("%d", &k2);printf("y2 = ");scanf("%d", &l2);
initwindow(800,600); //Открываем графическое окно
rectangle (x1, y1, x2, y2);
rectangle (k1, l1, k2, l2);
//пересекаюся, не пересекаются, касаются, принадлежит.
//x1 > k2 первый правее второго; x2 < k1 первый левее второго
//y1 > l2 первый ниже второго; y2 < l1 первый выше второго
if (x1 > k2 || x2 < k1 || y1 > l2 || y2 < l1)
{
outtextxy (5, 500, "Прямоугольники не пересекаюся"); // пересекаются или совпадают
} else {
outtextxy (5, 500, "Прямоугольники пересекаюся");
}
if (x1 < k1 && y1 < l1 && x2 > k2 && y2 > l2)
{
outtextxy (5, 520, "Второй прямоугольник принадлежит первому");
if (k1 < x1 && l1 < y1 && k2 > x2 && l2 > y2)
{
outtextxy (5, 520, "Первый прямоугольник принадлежит второму");
}
}else{
outtextxy (5, 520, "Прямоугольники не пренадлежат друг другу");
}
if (x1 != k1 && x1 != k2 && x2 == k1 && x2 != k2 && l1 != y1 && l1 != y2 && l2 != y1 && l2 != y2)
{
outtextxy (5, 540, "Прямоугольники касаются друг другу");
}else{
if (x1 != k1 && x1 == k2 && x2 != k1 && x2 != k2 && l1 != y1 && l1 != y2 && l2 != y1 && l2 != y2)
{
outtextxy (5, 540, "Прямоугольники касаются друг другу");
}else{
if (x1 != k1 && x1 != k2 && x2 != k1 && x2 != k2 && l1 != y1 && l1 == y2 && l2 != y1 && l2 != y2)
{
outtextxy (5, 540, "Прямоугольники касаются друг другу");
}else{
if (x1 != k1 && x1 != k2 && x2 != k1 && x2 != k2 && l1 != y1 && l1 != y2 && l2 == y1 && l2 != y2)
{
outtextxy (5, 540, "Прямоугольники касаются друг другу");
}else{
outtextxy (5, 540, "Прямоугольники не касаются друг другу");
}
}
}
}
_getch();
closegraph(); //Закрыть окно с графикой
return 0;
}
Объяснение кода листинга программы
- Объявлены переменные: x1, x2, y1, y2, k1, k2, l1, l2.
- Ввод координат противоположных вершин двух прямоугольников с помощью функции scanf.
- Открытие графического окна с помощью функции initwindow.
- Отображение прямоугольников с помощью функции rectangle.
- Проверка условий для определения взаимного расположения прямоугольников:
- Если прямоугольники пересекаются или совпадают, выводится сообщение
Прямоугольники не пересекаюся. - Если второй прямоугольник принадлежит первому, выводится сообщение
Второй прямоугольник принадлежит первому. - Если прямоугольники касаются друг друга, выводится сообщение
Прямоугольники касаются друг другу. - Если прямоугольники не пересекаются, не принадлежат друг другу и не касаются друг друга, выводится сообщение
Прямоугольники не пренадлежат друг другу.
- Если прямоугольники пересекаются или совпадают, выводится сообщение
- Закрытие графического окна с помощью функции closegraph.
- Возвращение значения 0, что означает успешное выполнение программы.