Hmm, très intéressant problème. Mon approche serait probablement quelque chose le long des lignes suivantes:
- Un moyen de savoir ce que les zones d'intersection entre un nombre arbitraire de cercles est, c'est à dire si j'ai 3 cercles, j'ai besoin d'être en mesure de travailler sur ce que l'intersection entre ces cercles est. Le "Monte-Carlo" méthode serait une bonne façon de rapprocher ce (http://local.wasp.uwa.edu.au/~pbourke/géométrie/circlearea/).
- Éliminer tous les cercles qui sont contenues entièrement dans un autre cercle plus grand (regardez le rayon et le module de la distance entre le centre des deux cercles) je ne pense pas que c'est obligatoire.
- Choisissez 2 cercles (appelons les A et B) et la superficie totale de la zone à l'aide de cette formule:
(cela est vrai pour n'importe quelle forme, que ce soit de cercle ou autre)
area(A∪B) = area(A) + area(B) - area(A∩B)
Où A ∪ B
signifie Une union B et A ∩ B
signifie Une intersection B (vous pouvez faire ce travail à partir de la première étape.
- Maintenant, gardez à l'ajout de cercles et de continuer à travailler sur la zone ajoutée comme une somme / soustraction des zones de cercles et de zones d'intersections entre les cercles. Par exemple, pour les 3 cercles (appelez-le supplément du cercle C) nous travaillons sur la zone à l'aide de cette formule:
(C'est le même que ci-dessus où l' A
a été remplacé par A∪B
)
area((A∪B)∪C) = area(A∪B) + area(C) - area((A∪B)∩C)
Où area(A∪B)
nous avons juste travaillé, et area((A∪B)∩C)
peut être trouvé:
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)
Là encore, vous pouvez trouver de la zone(A∩B∩C) ci-dessus.
Le problème est la dernière étape - le plus de cercles ajoutés plus il devient complexe. Je crois qu'il s'agit d'une extension pour travailler sur la zone d'intersection finie de l'union, ou alternativement, vous pouvez être en mesure de manière récursive.
Également en ce qui concerne l'aide de Monte-Carlo, rapprochant le domaine de la itersection, je crois que c'est possible de réduire l'intersection d'un nombre arbitraire de cercles à l'intersection de 4 de ces cercles, qui peut être calculée exactement (aucune idée de comment faire cela, cependant).
Il est probable que la meilleure manière de faire ceci btw - la complexité augmente de façon significative (éventuellement de façon exponentielle, mais je ne suis pas sûr) pour chaque supplémentaire cercle ajouté.