C++: точки и прямоугольники...
Прямоугольник со сторонами, параллельными осям координат, задается координатами противоположных вершин. Заданы два прямоугольника . Определить, лежит ли один прямоугольник внутри другого.
Логичней всего определить пользовательский тип данных "Точка", а затем, на его основе, "Прямоугольник", как совокупность координат двух противоположных углов прямоугольника. Имеет смысл хранить информацию о координатах так, чтобы для первой точки (a) всегда получался левый нижний угол, а для второй точки (b) - верхний правый. Функция set при необходимости переставляет координаты именно таким образом. Функция inside определяет, лежит ли прямоугольник p1 внутри p2.
#include <stdio.h>
typedef struct point { double x,y; };
typedef struct rect { point a,b; };
void set (rect &p) {
double temp;
if (p.a.x>p.b.x) { temp=p.a.x; p.a.x=p.b.x; p.b.x=temp; }
if (p.a.y>p.b.y) { temp=p.a.y; p.a.y=p.b.y; p.b.y=temp; }
}
int inside (rect p1, rect p2) {
return (p2.a.x<=p1.a.x && p1.b.x<=p2.b.x &&
p2.a.y<=p1.a.y && p1.b.y<=p2.b.y ? 1 : 0);
}
void main () {
rect p1 = { {3,2}, {1,1} },
p2 = { {0,5}, {4,0} };
set (p1);
set (p2);
printf ("\n%s",inside(p1,p2)?"Yes":"No");
getchar ();
}
Несложно написать и другие базовые действия с прямоугольниками, а лучше всего, конечно, реализовать класс.
20.10.2014, 16:06 [10727 просмотров]

