Посмотрите алгоритмы CSG (Construtive Solid Geometry). Они конечно касаются объёмных тел, но в целом, если разберётесь с приёмами, можно, я думаю, легко перенести на поверхности. А если ваши области лежат на двухмерной поверхности (я это не понял из вашего вопроса), то CSG в одну секунду легко упрощается до 2D.
В своё время мне помогла разобраться с алгоритмами CSG библиотека three_csg.js. Я работал со three.js, и эта библиотека по сути расширяет её, позволяя добавить булевы операции. Она совсем небольшая, несложно разобраться в её работе целиком.
Наверняка и на других языках есть куча реализаций CSG, просто я написал о том, с чем сам имел дело.
Если у вас чисто 2D, то такую библиотеку можно и самому за полдня легко написать. Даже интересно. Тут и знаний особых не надо, кроме как умения решать систему уравнений:
y = k1 * x + b1
y = k2 * x + b2