Hmm, problème très intéressant. Mon approche serait probablement quelque chose du genre:
- Trouvez un moyen de déterminer ce que sont les zones d'intersection entre un nombre arbitraire de cercles, c'est-à-dire que si j'ai 3 cercles, je dois être capable de déterminer quelle est l'intersection entre ces cercles. La méthode "Monte-Carlo" serait un bon moyen de se rapprocher de cela ( http://local.wasp.uwa.edu.au/~pbourke/geometry/circlearea/ ).
- Éliminez tous les cercles qui sont entièrement contenus 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 ce soit obligatoire.
- Choisissez 2 cercles (appelez-les A et B) et calculez la surface totale en utilisant cette formule:
(cela est vrai pour n'importe quelle forme, que ce soit un cercle ou autre)
area(A∪B) = area(A) + area(B) - area(A∩B)
Où A ∪ B
signifie A union B et A ∩ B
signifie A intersecter B (vous pouvez le calculer à partir de la première étape.
- Continuez maintenant à ajouter des cercles et continuez à travailler sur la zone ajoutée en tant que somme / soustraction des zones de cercles et des zones d'intersections entre les cercles. Par exemple, pour 3 cercles (appelez le cercle supplémentaire C), nous calculons l'aire en utilisant cette formule:
(C'est le même que ci-dessus où 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 venons de travailler, 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)
Où encore vous pouvez trouver la zone (A∩B∩C) d'en haut.
Le plus délicat est la dernière étape - plus les cercles sont ajoutés, plus cela devient complexe. Je crois qu'il y a une extension pour travailler sur l'aire d'une intersection avec une union finie, ou alternativement, vous pourrez peut-être la résoudre de manière récursive.
Aussi en ce qui concerne l'utilisation de Monte-Carlo pour approximer la zone d'itersection, je pense qu'il est possible de réduire l'intersection d'un nombre arbitraire de cercles à l'intersection de 4 de ces cercles, qui peuvent être calculés exactement (aucune idée de comment faire cela toutefois).
Il existe probablement une meilleure façon de faire cela - la complexité augmente considérablement (peut-être de façon exponentielle, mais je ne suis pas sûr) pour chaque cercle supplémentaire ajouté.