Хм, очень интересная проблема. Мой подход, вероятно, будет примерно таким:
- Разработайте способ определения областей пересечения между произвольным количеством кругов, т.е. если у меня есть 3 круга, мне нужно уметь вычислить, каково пересечение между этими кругами. Метод «Монте-Карло» был бы хорошим способом приблизиться к этому ( http://local.wasp.uwa.edu.au/~pbourke/geometry/circlearea/ ).
- Удалите все круги, которые полностью содержатся в другом большом круге (посмотрите на радиус и модуль расстояния между центрами двух кругов), я не считаю это обязательным.
- Выберите 2 круга (назовите их A и B) и определите общую площадь, используя эту формулу:
(это верно для любой формы, будь то круг или нет)
area(A∪B) = area(A) + area(B) - area(A∩B)
Где A ∪ B
означает A объединение B и A ∩ B
означает, что A пересекает B (вы можете решить это с первого шага.
- Теперь продолжайте добавлять круги и продолжайте прорабатывать область, добавленную как сумму / вычитание областей кругов и областей пересечений между кругами. Например, для 3 кругов (назовите дополнительный круг C) мы прорабатываем площадь по следующей формуле:
(Это то же самое, что и выше, где A
было заменено на A∪B
)
area((A∪B)∪C) = area(A∪B) + area(C) - area((A∪B)∩C)
Где area(A∪B)
мы только что поработали, и area((A∪B)∩C)
можно найти:
area((A∪B)nC) = area((A∩C)∪(B∩C)) = area(A∩C) + area(A∩B) - area((A∩C)∩(B∩C)) = area(A∩C) + area(A∩B) - area(A∩B∩C)
Где снова вы можете найти область (A∩B∩C) сверху.
Сложность - последний шаг - чем больше добавляется кругов, тем сложнее становится. Я считаю, что есть расширение для определения площади пересечения с конечным объединением, или, в качестве альтернативы, вы можете рекурсивно вычислить его.
Кроме того, что касается использования Монте-Карло для аппроксимации площади итеративного сечения, я считаю, что можно уменьшить пересечение произвольного количества кругов до пересечения 4 из этих кругов, которые можно точно вычислить (не знаю, как это сделать. тем не мение).
Вероятно, есть лучший способ сделать это, кстати - сложность значительно возрастает (возможно, экспоненциально, но я не уверен) для каждого добавленного круга.