Хм, дуже цікава проблема. Мій підхід, ймовірно, буде чимось таким:
- Опрацюйте спосіб опрацювання, що таке ділянки перетину між довільною кількістю кіл, тобто якщо у мене є 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
означає об'єднання B і A ∩ B
означає пересічення B (ви можете це зробити з першого кроку.
- Тепер продовжуйте додавати кола та продовжуйте розробляти додану область як суму / віднімання областей кіл та областей перетинів між колами. Наприклад, для 3-х кіл (називаємо зайве коло С) ми обробляємо область за такою формулою:
(Це те саме, що вище, де 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 тих кіл, які можна точно обчислити (не маю уявлення, як це зробити проте).
Мабуть, є кращий спосіб зробити цей btw - складність значно зростає (можливо, експоненціально, але я не впевнений) для кожного доданого додаткового кола.