Вот примерно то, что вам нужно сделать, выраженное в максимально возможной степени, но охватывающее все возможности:
- Разработать класс пересечения. То есть Сколько ребер у области пересечения? Это может быть что угодно от 0 до 8.
- Найти все вершины пересечения. Это будут все пересечения между краями прямоугольников и соответствующими углами самих прямоугольников. Работа с этим битом самая сложная / утомительная.
- Определите площадь пересечения, разделив ее на треугольники, если необходимо.
Вот все способы, которыми прямоугольники могут пересекаться:
Обновление
У меня были некоторые мысли, и лучший способ классифицировать пересечение - это обвести периметр каждого прямоугольника и подсчитать, сколько раз каждый край пересекает другой край. Вы получите вектор, например для шестигранной области пересечения: {1,1,1,1}, {0,1,1,1} и для 8: {2,2,2,2}, {2,2,2,2} , Два особых случая, которые вам нужно проверить, это когда один прямоугольник полностью охватывает другой и когда края находятся на одной линии. Вам нужно будет сделать тщательные проверки, но это будет отправной точкой для функции для классификации пересечения.