Есть два прямоугольника сторони, которого паралельни к осям и они пересекаются. Нам известно:
(x1,y1) - левая нижняя точка первого прямоугольника
(x2,y2) - правая верхняя точка первого прямоугольника
(x3,y3) - левая нижняя точка второго прямоугольника
(x4,y4) - правая верхняя точка второго прямоугольника
И нужно найти площадь их пересечения. Но пересекатся они могут с разних сторон.
Хотя вопрос и простой, оставлю в качестве шпаргалки-сниппета:
#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 растет сверху вниз, внести поправки соответствующие).
Идея простая, иллюстрируется на картинке (для ширины, для высоты аналогично):
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Использую эту функцию в консольном приложении, все ок, если использую в оконном приложении появляется ошибка: идентификатор не найденwindows
Пишу приложение с использованием DirectX SDK на C++Всё было нормально до того момента как я стал писать поддержку шейдеров в своём приложении