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

210
16 декабря 2017, 07:02

Есть два прямоугольника сторони, которого паралельни к осям и они пересекаются. Нам известно:

(x1,y1) - левая нижняя точка первого прямоугольника

(x2,y2) - правая верхняя точка первого прямоугольника

(x3,y3) - левая нижняя точка второго прямоугольника

(x4,y4) - правая верхняя точка второго прямоугольника

И нужно найти площадь их пересечения. Но пересекатся они могут с разних сторон.

Answer 1

Хотя вопрос и простой, оставлю в качестве шпаргалки-сниппета:

#include <algorithm>
/*
    x1, y1 - левая нижняя точка первого прямоугольника
    x2, y2 - правая верхняя точка первого прямоугольника
    x3, y3 - левая нижняя точка второго прямоугольника
    x4, y4 - правая верхняя точка второго прямоугольника
*/
int f(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
{
    int left = std::max(x1, x3);
    int top = std::min(y2, y4);
    int right = std::min(x2, x4);
    int bottom = std::max(y1, y3);
    int width = right - left;
    int height = top - bottom;
    if ((width < 0) || (height < 0))
        return 0;
    return width * height;
}

Исходя из текста вопроса, полагаю, что координаты растут из нижнего левого угла (если Y растет сверху вниз, внести поправки соответствующие).

Идея простая, иллюстрируется на картинке (для ширины, для высоты аналогично):

READ ALSO
RegOpenKeyExA выдает ошибку: идентификатор не найден

RegOpenKeyExA выдает ошибку: идентификатор не найден

Использую эту функцию в консольном приложении, все ок, если использую в оконном приложении появляется ошибка: идентификатор не найденwindows

169
D3D_MIN_PRECISION не определён

D3D_MIN_PRECISION не определён

Пишу приложение с использованием DirectX SDK на C++Всё было нормально до того момента как я стал писать поддержку шейдеров в своём приложении

191