La posizione più vicina al punto sarà sul punto o toccherà un cerchio.
pertanto, prima controlla il punto, quindi ruota il nuovo cerchio attorno al bordo di ciascun cerchio esistente, calcolando la distanza dal punto e se ti sovrapponi mentre procedi e tenendo traccia del punto di distanza minima. Fermati quando hai attraversato ogni cerchio.
vale a dire. controlla tutti i punti sulle linee verdi, oltre al cerchio bianco. dove la linea verde è un cerchio con raggio del rosso più il blu
devi controllare l'intera linea verde, non solo le intersezioni in modo da coprire questi casi limite.
Ovviamente la dimensione del passo della traversata sarà importante in termini di prestazioni. Ma poiché affermi che le prestazioni non sono un problema, scegli il valore corrispondente alla risoluzione del valore di output. cioè galleggiante, lungo?
una precisazione:
il mio suggerimento è quello di forzare la forza di tutti i punti attorno a ciascun cerchio per verificarne la sovrapposizione con tutti gli altri cerchi in ciascun punto. nessuna intelligenza.
Se l'immagine di esempio è indicativa del numero di cerchi e della risoluzione, non dovrebbe essere un problema per un PC standard
abbiamo 20 cerchi di raggio medio 200, quindi circa 20 * 2 π * 200 punti * 20 test di intersezione = 4800000 iterazioni
Nota:
Approcci iterativi come questo sono imperfetti in quanto la dimensione del passo, in questo caso la risoluzione dell'output, può influire notevolmente sul risultato.
Supponi di avere due cerchi rossi a 2 pixel di distanza e un cerchio blu di 1 pixel di raggio per schiacciarli. Chiaramente con uno dei due pixel come centro del cerchio blu si sovrapporrà uno dei rossi. ma ovviamente c'è spazio per il cerchio se il centro si trova tra i due pixel.
Da qui il mio commento che chiede la risoluzione dell'output. che hai detto potrebbe essere qualsiasi cosa.
puoi anche risolvere l'equazione simultanea per ogni coppia di cerchi con aumento del raggio del raggio del cerchio blu.
questo ti darà i punti in cui il cerchio blu toccherà entrambi i cerchi rossi in modo più accurato rispetto all'iterazione.
Tuttavia. ci sono diverse condizioni in cui se lo fai solo ottieni la risposta sbagliata o nessuna. vale a dire.
1 o nessun cerchio
2 o più cerchi ma con un punto bersaglio molto lontano e al di fuori di essi.
molti cerchi ma con un punto bersaglio vicino alla superficie