Это очень сильно зависит от того, что вы имеете в виду под «есть» и «получить». Каковы форматы ввода и вывода? Вы хотите последовательность точек или просто область? Это для общего решения или просто для упрощенного случая?
Для быстрого общего решения я настоятельно рекомендую BOOST polygon library (раскрытие: я был одним из рецензентов для презентации конференции BOOST). Это обрабатывает произвольные многоугольники, включая дырки, и делает прекрасную работу всех основных операций полигона.
Простой полигон - это последовательность точек. Вы можете создавать наборы полигонов. В этом случае объявите все ваши полигоны; поместите красный прямоугольник в набор A, серый - в набор B. Затем A-B возвращает желаемый отображаемый многоугольник.
Если у вас есть координаты четырех вершин каждого прямоугольника, вы можете вычесть поверхность частей каждого серого прямоугольника внутри красного прямоугольника из общей поверхности красного прямоугольника. Этого не должно быть слишком сложно. –