Hmm, sehr interessantes Problem. Mein Ansatz wäre wahrscheinlich wie folgt:
- Erarbeiten Sie eine Methode, um die Schnittbereiche zwischen einer beliebigen Anzahl von Kreisen zu ermitteln. Wenn ich also drei Kreise habe, muss ich in der Lage sein, den Schnittpunkt zwischen diesen Kreisen zu ermitteln. Die "Monte-Carlo" -Methode wäre eine gute Möglichkeit, dies zu approximieren ( http://local.wasp.uwa.edu.au/~pbourke/geometry/circlearea/ ).
- Beseitigen Sie alle Kreise, die vollständig in einem anderen größeren Kreis enthalten sind (siehe Radius und Modul des Abstands zwischen dem Mittelpunkt der beiden Kreise). Ich halte dies nicht für obligatorisch.
- Wählen Sie 2 Kreise (nennen Sie sie A und B) und berechnen Sie die Gesamtfläche mit dieser Formel:
(Dies gilt für jede Form, sei es Kreis oder auf andere Weise)
area(A∪B) = area(A) + area(B) - area(A∩B)
Wobei A ∪ B
A Vereinigung B A ∩ B
bedeutet und A B schneidet (Sie können dies vom ersten Schritt an herausfinden.
- Fügen Sie nun weitere Kreise hinzu und berechnen Sie den hinzugefügten Bereich als Summe / Subtraktion von Kreisbereichen und Schnittflächen zwischen Kreisen. Zum Beispiel für 3 Kreise (nennen Sie den zusätzlichen Kreis C) berechnen wir den Bereich mit dieser Formel:
(Dies ist das gleiche wie oben, wo A
durch ersetzt wurde A∪B
)
area((A∪B)∪C) = area(A∪B) + area(C) - area((A∪B)∩C)
Wo area(A∪B)
wir gerade trainiert haben und area((A∪B)∩C)
zu finden sind:
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)
Wo wieder finden Sie Bereich (A∩B∩C) von oben.
Das Knifflige ist der letzte Schritt - je mehr Kreise hinzugefügt werden, desto komplexer wird es. Ich glaube, es gibt eine Erweiterung, um den Bereich einer Kreuzung mit einer endlichen Vereinigung zu berechnen, oder Sie können ihn alternativ rekursiv berechnen.
Auch im Hinblick auf die Verwendung von Monte-Carlo zur Annäherung des Querschnittsbereichs halte ich es für möglich, den Schnittpunkt einer beliebigen Anzahl von Kreisen auf den Schnittpunkt von 4 dieser Kreise zu reduzieren, der genau berechnet werden kann (keine Ahnung, wie dies zu tun ist) jedoch).
Es gibt wahrscheinlich einen besseren Weg, dies zu tun - die Komplexität nimmt für jeden zusätzlichen hinzugefügten Kreis erheblich zu (möglicherweise exponentiell, aber ich bin mir nicht sicher).