У меня проблемы с выяснением этой части программы:
Напишите функцию, не являющуюся членом, 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) в верхнем левом углу и не работает
Рассмотрим пересечение прямоугольников как пересечение 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())
Если оба эти пересечения не пусты, то вы можете сделать прямоугольник пересечения результата, стороны которого являются этими пересечениями.
Все, что вам нужно сделать, это правильно реализовать функцию пересечения интервалов.
Других решений пока нет …