O posicionamento mais próximo ao ponto estará no ponto ou tocando em um círculo.
portanto, verifique primeiro o ponto, depois role o novo círculo em torno da borda de cada círculo existente, calculando a distância do ponto e se você se sobrepuser à medida que avança e mantendo o controle do ponto de distância mínimo. Pare quando você percorrer todos os círculos.
ie verifique todos os pontos nas linhas verdes, além do círculo branco. onde a linha verde é um círculo com raio do vermelho mais o azul
você precisa verificar toda a linha verde, não apenas as interseções para cobrir esses casos de arestas.
Obviamente, o tamanho da etapa da sua travessia será importante em termos de desempenho. Mas como você declara que o desempenho não é um problema, escolha o valor correspondente à resolução do seu valor de saída. ou seja, flutuar, longo?
esclarecimento:
minha sugestão é a força bruta de todos os pontos ao redor de cada círculo, testando a sobreposição com todos os outros círculos em cada ponto. sem esperteza.
Se a foto de exemplo é indicativa do número de círculos e da resolução, não deve ser um problema para um PC padrão
temos 20 círculos de raio médio 200, ou seja, aproximadamente 20 * 2 π * 200 pontos * 20 testes de interseção = 4800000 iterações
Nota:
Abordagens iterativas como essa são falhas, pois o tamanho da sua etapa, neste caso a resolução da sua saída, pode afetar muito o resultado.
Digamos que eu tenha dois círculos vermelhos separados por 2 pixels e um círculo azul de raio de 1 pixel para espremer entre eles. Claramente, com um dos dois pixels como centro do círculo azul, ele se sobrepõe a um dos vermelhos. mas obviamente há espaço para o círculo se o centro estiver entre os dois pixels.
Daí o meu comentário perguntando sobre a resolução da saída. que você disse que poderia ser qualquer coisa.
você também pode resolver a equação simultânea para cada par de círculos com raio aumentado pelo raio do círculo azul.
isso fornecerá os pontos em que o círculo azul tocará nos dois círculos vermelhos com mais precisão do que na iteração.
Contudo. existem várias condições em que, se você fizer isso, obtém a resposta errada ou não. ie
1 ou nenhum círculo
2 ou mais círculos, mas com o ponto alvo distante e fora deles.
muitos círculos, mas com o ponto alvo próximo à superfície