Le placement le plus proche du point sera soit sur le point, soit en touchant un cercle.
par conséquent, vérifiez d'abord le point, puis faites rouler le nouveau cercle autour du bord de chaque cercle existant, calculez la distance à partir du point et si vous vous chevauchez au fur et à mesure et gardez une trace du point de distance minimale. Arrêtez-vous lorsque vous avez traversé chaque cercle.
c'est à dire. vérifiez tous les points sur les lignes vertes, plus le cercle blanc. où la ligne verte est un cercle de rayon rouge plus bleu
vous devez vérifier l'ensemble de la ligne verte, pas seulement les intersections, afin de couvrir ces cas de bord.
De toute évidence, la taille du pas de votre parcours va être importante en termes de performances. Mais comme vous déclarez que les performances ne sont pas un problème, choisissez la valeur correspondant à la résolution de votre valeur de sortie. c'est à dire flotter, longtemps?
clarification:
ma suggestion est de forcer brutalement tous les points autour de chaque cercle pour tester le chevauchement avec tous les autres cercles à chaque point. aucune intelligence.
Si l'exemple d'image est indicatif du nombre de cercles et de la résolution, cela ne devrait pas être un problème pour un PC standard
nous avons 20 cercles de rayon moyen 200, donc environ 20 * 2 π * 200 points * 20 tests d'intersection = 4800000 itérations
Remarque:
Les approches itératives comme celle-ci sont imparfaites en ce que la taille de votre pas, dans ce cas la résolution de votre sortie, peut grandement affecter le résultat.
Disons que j'ai deux cercles rouges distants de 2 pixels et un cercle bleu d'un rayon de 1 pixel à serrer entre eux. Clairement, avec l'un des deux pixels comme centre du cercle bleu, il chevauchera l'un des rouges. mais évidemment, il y a de la place pour le cercle si le centre se situe entre les deux pixels.
D'où mon commentaire concernant la résolution de la sortie. que vous avez dit pourrait être n'importe quoi.
vous pouvez également résoudre l'équation simultanée pour chaque paire de cercles avec une augmentation de rayon par le rayon du cercle bleu.
cela vous donnera les points où le cercle bleu touchera les deux cercles rouges plus précisément que l'itération.
Pourtant. il y a plusieurs conditions où si vous ne faites que cela, vous obtenez une mauvaise ou aucune réponse. c'est à dire.
1 ou aucun cercle
2 cercles ou plus mais avec un point cible loin et en dehors d'eux.
de nombreux cercles mais avec un point cible proche de la surface