C ++ пересечение двух прямоугольников

У меня проблемы с выяснением этой части программы:

Напишите функцию, не являющуюся членом, intersection (), которая принимает два прямоугольника
параметры и возвращает прямоугольник, содержащий пересечение
два. Конечно, если два прямоугольника не пересекаются, это должно
вернуть прямоугольник по умолчанию.

Пока это мой код .cpp:

Rectangle::Rectangle()
{
p1.x = 0;
p1.y = 0;
p2.x = 0;
p2.y = 0;
}
Rectangle::Rectangle(double x, double y, double width, double height)
{
p1.x = x;
p1.y = y;
p2.x = x + width;
p2.y = y + height;
}
double Rectangle::getArea() const
{
return (p2.x - p1.x) * (p2.y - p1.y);
}
double Rectangle::getWidth() const
{
return (p2.x - p1.x);
}
double Rectangle::getHeight() const
{
return (p2.y - p1.y);
}
double Rectangle::getX() const
{
return p1.x;
}
double Rectangle::getY() const
{
return p1.y;
}
void Rectangle::setLocation(double x, double y)
{
p1.x = x;
p1.y = y;
}
void Rectangle::setSize(double width, double height)
{
p2.x = width;
p2.y = height;
}

Rectangle intersection(const Rectangle& rec1, const Rectangle& rec2)
{
double ix = 0.0;
double iy = 0.0;
double iwidth = 0.0;
double iheight = 0.0;

if(rec1.getX() > rec2.getX() && rec2.getX() > (rec1.getX() + rec1.getWidth())
&& rec1.getY() > rec2.getY() && rec2.getY() > (rec1.getY() + rec1.getHeight()))
{
ix = rec2.getX();
iy = rec2.getY();
iwidth = rec1.getX() + rec1.getWidth();
iheight = rec1.getY() + rec1.getHeight();
}

Я не написал часть «else», потому что сначала это «if» должно проверять правильность в некоторых случаях, но это не так;
Я предполагаю, что (0, 0) находится в левом нижнем углу, потому что я уже пробовал это с (0, 0) в верхнем левом углу и не работает

-1

Решение

Рассмотрим пересечение прямоугольников как пересечение 2 пар интервалов:

Первая пара — это пересечение горизонтальных сторон прямоугольников:

Пересечение1 = (rec1.getX(), rec1.getX()+rec1.getWidth())&(rec2.getX(), rec2.getX()+rec2.getWidth())

Вторая пара — это пересечение вертикальных сторон прямоугольников:

Пересечение2 = (rec1.getY(), rec1.getY()+rec1.getHeight())&(rec2.getY(), rec2.getY()+rec2.getHeight())

Если оба эти пересечения не пусты, то вы можете сделать прямоугольник пересечения результата, стороны которого являются этими пересечениями.

Все, что вам нужно сделать, это правильно реализовать функцию пересечения интервалов.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]