Algorithmus zur Berechnung der Positionen zufälliger Kreise, damit diese sich nicht überlappen

Ich habe folgendes Problem.

Ich habe eine große Region mit einer zufälligen Anzahl von Kreisen unterschiedlicher Größe. Wenn ein neuer Kreis mit einem zufälligen Radius an einer zufälligen Stelle eingefügt wird, möchte ich eine nahe gelegene Position dafür finden, damit sie sich nicht mit den anderen überlappt. Es ist optimal, wenn die Kreise eng bleiben.

Die Anzahl der Kreise und ihre Größe sind begrenzt, aber zufällig. Die Region wird ziemlich groß sein (2500 x 2500, vielleicht), also ein Array von Pixeln, wie vorgeschlagenHier kommt nicht in frage. Eine Person, die dieselbe Frage beantwortete, schlug ein Raster vor, in dem die Zellen die Größe der Kreise haben. Das würde mein Problem lösen, Zellen mit der Größe des größtmöglichen Kreises zu verwenden, aber ich möchte, dass die Kreise so nah wie möglich bleiben, damit meine Anforderungen nicht vollständig erfüllt werden.

Ein sehr grundlegender Ansatz besteht darin, Kollisionen bei der Platzierung des neuen Kreises zu erkennen und ihn von dem Kreis wegzubewegen, mit dem er kollidiert. Überprüfen Sie danach erneut auf Kollisionen und wiederholen Sie den Vorgang. Dies ist offensichtlich nicht sehr elegant und es ist anfällig für Endlosschleifen (häufiger als Sie vielleicht denken).

Ziel ist es, die nächstmögliche Position für den neu eingefügten Kreis zu finden, damit er sich nicht mit anderen überlappt.

P.D.
Eine sehr schöne Sache, aber eine andere Sache, und nicht mein Hauptziel, wäre es, so viele Kreise wie nötig neu anzuordnen, anstatt nur einen zu verschieben, als ob sie sich gegenseitig „antreiben“ würden. Ich würde die Entfernung der Anzahl der bewegten Kreise vorziehen. Das heißt, ich würde es vorziehen, wenn sich viele Kreise ein wenig bewegen als ein Kreis, um sich sehr weit von seiner ursprünglichen Position zu entfernen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage