Najbliższe umiejscowienie do punktu będzie albo na punkcie, albo na okręgu.
dlatego najpierw sprawdź punkt, a następnie przetocz nowy okrąg dookoła krawędzi każdego istniejącego koła, obliczając odległość od punktu i jeśli zachodzi na siebie, idź wzdłuż minimalnego punktu odległości. Zatrzymaj się, gdy przejdziesz przez każdy krąg.
to znaczy. sprawdź wszystkie punkty na zielonych liniach oraz białe kółko. gdzie zielona linia jest okręgiem o promieniu czerwonego plus niebieskiego
musisz sprawdzić całą zieloną linię, a nie tylko skrzyżowania, aby pokryć te przypadki krawędzi.
Oczywiście wielkość kroku twojego przejścia będzie ważna pod względem wydajności. Ale ponieważ stwierdzasz, że wydajność nie stanowi problemu, wybierz wartość odpowiadającą rozdzielczości wartości wyjściowej. tj. pływak, długo?
wyjaśnienie:
moją sugestią jest brutalne użycie siły we wszystkich punktach wokół każdego koła, sprawdzając, czy pokrywają się one ze wszystkimi innymi okręgami w każdym punkcie. bez sprytu.
Jeśli przykładowe zdjęcie wskazuje liczbę kół i rozdzielczość, nie powinno to stanowić problemu dla standardowego komputera
mamy 20 okręgów o średnim promieniu 200, czyli około 20 * 2 π * 200 punktów * 20 testów przecięcia = 4800000 iteracji
Uwaga:
Takie podejścia iteracyjne są wadliwe, ponieważ rozmiar kroku, w tym przypadku rozdzielczość wyniku, może znacznie wpłynąć na wynik.
Powiedzmy, że mam dwa czerwone koła oddalone od siebie o 2 piksele i niebieski okrąg o promieniu 1 piksela, aby się między nimi ścisnąć. Najwyraźniej jeden z dwóch pikseli jako środek niebieskiego koła nachodzi na jeden z czerwonych. ale oczywiście jest miejsce na koło, jeśli środek leży między dwoma pikselami.
Stąd mój komentarz z pytaniem o rozdzielczość wyjścia. co powiedziałeś, że może być cokolwiek.
możesz także rozwiązać równanie równoczesne dla każdej pary kół ze wzrostem promienia o promień niebieskiego koła.
da ci to punkty, w których niebieskie kółko dotknie obu czerwonych kół bardziej dokładnie niż iteracyjnie.
Jednak. istnieje kilka warunków, w których jeśli tylko to zrobisz, otrzymasz błędną odpowiedź lub jej brak. to znaczy.
1 lub brak kręgów
2 lub więcej okręgów, ale z punktem docelowym daleko i poza nimi.
wiele okręgów, ale z punktem docelowym blisko powierzchni