Hmm, bardzo ciekawy problem. Moje podejście byłoby prawdopodobnie podobne do następujących:
- Opracuj sposób na ustalenie, jakie są obszary przecięcia dowolnej liczby okręgów, tj. Jeśli mam 3 okręgi, muszę być w stanie ustalić, jakie jest przecięcie między tymi okręgami. Metoda „Monte-Carlo” byłaby dobrym sposobem na przybliżenie tego ( http://local.wasp.uwa.edu.au/~pbourke/geometry/circlearea/ ).
- Wyeliminuj wszystkie okręgi zawarte w całości w innym większym okręgu (spójrz na promień i moduł odległości między środkami dwóch okręgów) Nie sądzę, że jest to obowiązkowe.
- Wybierz 2 okręgi (nazwij je A i B) i oblicz całkowitą powierzchnię za pomocą tego wzoru:
(dotyczy to dowolnego kształtu, czy to koła, czy innego)
area(A∪B) = area(A) + area(B) - area(A∩B)
Gdzie A ∪ B
oznacza A związek B i A ∩ B
oznacza A przecina B (możesz to rozwiązać od pierwszego kroku.
- Teraz kontynuuj dodawanie okręgów i kontynuuj obliczanie obszaru dodanego jako suma / odejmowanie obszarów okręgów i obszarów przecięć między okręgami. Na przykład dla 3 okręgów (nazwij dodatkowe kółko C) obliczamy pole według następującego wzoru:
(To jest to samo, co powyżej, gdzie A
zostało zastąpione A∪B
)
area((A∪B)∪C) = area(A∪B) + area(C) - area((A∪B)∩C)
Gdzie area(A∪B)
właśnie wypracowaliśmy i area((A∪B)∩C)
można znaleźć:
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)
Gdzie znowu można znaleźć obszar (A∩B∩C) z góry.
Najtrudniejszy jest ostatni krok - im więcej okręgów zostanie dodanych, tym bardziej się to skomplikuje. Uważam, że istnieje rozszerzenie umożliwiające obliczenie obszaru przecięcia ze skończoną sumą lub alternatywnie można to rozwiązać rekursywnie.
Również w odniesieniu do użycia metody Monte-Carlo do przybliżenia obszaru itersekcji, uważam, że możliwe jest zredukowanie przecięcia dowolnej liczby okręgów do przecięcia 4 z tych okręgów, które można dokładnie obliczyć (nie mam pojęcia, jak to zrobić jednak).
Przy okazji prawdopodobnie istnieje lepszy sposób na zrobienie tego - złożoność znacznie wzrasta (prawdopodobnie wykładniczo, ale nie jestem pewien) dla każdego dodanego dodatkowego koła.