Il posizionamento più vicino al punto sarà sul punto o toccando un cerchio.
quindi, prima controlla il punto, quindi tira il nuovo cerchio attorno al bordo di ogni cerchio esistente, calcolando la distanza dal punto e se ti sovrapponi mentre stai andando e tenendo traccia del punto di distanza minimo. Fermati quando hai attraversato ogni cerchio.
es. controlla tutti i punti sulle linee verdi, più il cerchio bianco. dove la linea verde è un cerchio con raggio del rosso più il blu
devicontrollarel'interalineaverde,nonsololeintersezioniinmododacoprirequesticasilimite.
Ovviamente la dimensione del tuo attraversamento sarà importante in termini di prestazioni. Tuttavia, quando affermi che le prestazioni non sono un problema, scegli il valore corrispondente alla risoluzione del tuo valore di output. cioè float, long?
Chiarimento:
il mio suggerimento è di forzare la forza bruta su tutti i punti attorno ai ogni test del cerchio per sovrapporsi a tutti gli altri cerchi in ogni punto. nessuna intelligenza.
Se l'immagine di esempio è indicativa del numero di cerchi e risoluzione, non dovrebbe essere un problema per un PC standard
abbiamo 20 cerchi di raggio medio 200 quindi questo è approssimativamente 20 * 2 π * 200 punti * 20 test di intersezione = 4800000 iterazioni
Nota:
Approcci iterativi come questo sono viziati dal fatto che le dimensioni del tuo passo, in questo caso la risoluzione del tuo output, possono influenzare notevolmente il risultato.
Supponiamo di avere due cerchi rossi separati da 2 pixel e un cerchio blu con raggio di 1 pixel tra loro. Chiaramente con uno dei due pixel come il centro del cerchio blu si sovrapporrà a 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 raggio aumentato del raggio del cerchio blu.
questo ti darà i punti in cui il cerchio blu toccherà entrambi i cerchi rossi in modo più preciso rispetto all'iterazione.
Tuttavia. ci sono diverse condizioni in cui, se fai questo, ottieni la risposta sbagliata o assente. vale a dire.
1 o nessuna cerchi
2 o più cerchi ma con il punto di mira lontano e al di fuori di essi.
molti cerchi ma con il punto di mira vicino alla superficie