Algorytm do obliczania pozycji losowych okręgów, aby się nie nakładały

Mam następujący problem.

Mam duży region wypełniony losową liczbą okręgów o różnych rozmiarach. Jeśli nowy krąg losowego promienia zostanie wstawiony w losowej lokalizacji, chciałbym znaleźć dla niego pobliską pozycję, aby nie nakładała się na żadną z pozostałych. Jest optymalny, jeśli koła pozostają blisko.

Liczba okręgów i ich rozmiar są ograniczone, ale losowe. Region będzie dość duży (może 2500x2500), więc proponowana tablica pikselitutaj nie wchodzi w rachubę. Osoba, która odpowiedziała na to samo pytanie, zaproponowała siatkę, w której komórki mają rozmiar kół. To rozwiązałoby mój problem, wykorzystując komórki o największym możliwym kręgu, ale chciałbym, aby koła pozostały tak blisko, jak to możliwe, aby nie zaspokajało całkowicie moich potrzeb.

Bardzo podstawowe podejście polega na wykrywaniu kolizji przy umieszczaniu nowego okręgu i przenoszeniu go z kręgu, z którym się zderza. Następnie sprawdź ponownie kolizje i powtórz proces. To oczywiście nie jest zbyt eleganckie i podatne na nieskończone pętle (częściej niż mogłoby się wydawać).

Celem jest znalezienie najbliższej możliwej pozycji nowo wstawionego okręgu, aby nie nakładał się na nikogo innego.

P.D.
Bardzo miłą rzeczą, ale inną sprawą, a nie moim głównym celem, jest zmiana rozmieszczenia tak wielu kręgów, jak to jest konieczne, zamiast przemieszczania się tylko jednego, tak jakby „pchali” się nawzajem. Wolałbym odległość od liczby poruszonych kręgów. Oznacza to, że wolałbym, aby wiele kręgów poruszało się trochę niż jeden krąg, aby przesunąć się bardzo daleko od swojej pierwotnej pozycji.

questionAnswers(3)

yourAnswerToTheQuestion