Die dem Punkt am nächsten liegende Position befindet sich entweder auf dem Punkt oder sie berührt einen Kreis.
Überprüfen Sie daher zuerst den Punkt, und rollen Sie dann den neuen Kreis um die Kante jedes vorhandenen Kreises. Berechnen Sie dabei den Abstand zum Punkt, und achten Sie bei Überlappungen auf den Mindestabstandspunkt. Stoppen Sie, wenn Sie jeden Kreis durchlaufen haben.
dh Überprüfen Sie alle Punkte auf den grünen Linien sowie den weißen Kreis. Dabei ist die grüne Linie ein Kreis mit dem Radius von Rot und Blau
Sie müssen die gesamte grüne Linie und nicht nur die Schnittpunkte überprüfen, um diese Randfälle abzudecken.
Offensichtlich wird die Schrittgröße Ihrer Traversierung für die Leistung wichtig sein. Da Sie jedoch angeben, dass die Leistung kein Problem darstellt, wählen Sie den Wert, der der Auflösung Ihres Ausgabewerts entspricht. dh schweben, lange?
Klärung:
Mein Vorschlag ist, alle Punkte um jeden Kreis herum zu zwingen und auf Überlappung mit allen anderen Kreisen an jedem Punkt zu prüfen . keine klugheit.
Wenn das Beispielbild die Anzahl der Kreise und die Auflösung angibt, sollte dies für einen Standard-PC kein Problem darstellen
Wir haben 20 Kreise mit einem durchschnittlichen Radius von 200, dh ungefähr 20 * 2 π * 200 Punkte * 20 Schnittpunkttests = 4800000 Iterationen
Hinweis:
Iterative Ansätze wie dieser haben den Nachteil, dass Ihre Schrittweite, in diesem Fall die Auflösung Ihrer Ausgabe, das Ergebnis stark beeinflussen kann.
Angenommen, ich habe zwei rote Kreise, die 2 Pixel voneinander entfernt sind, und einen blauen Kreis mit einem Radius von 1 Pixel, der zwischen ihnen gedrückt werden soll. Es ist klar, dass eines der beiden Pixel als Mittelpunkt des blauen Kreises eines der Rottöne überlappt. aber offensichtlich ist Platz für den Kreis, wenn der Mittelpunkt zwischen den beiden Pixeln liegt.
Daher mein Kommentar zur Auflösung der Ausgabe. Was du gesagt hast, könnte alles sein.
Sie können auch die Simultangleichung für jedes Kreispaar lösen, wobei sich der Radius um den Radius des blauen Kreises erhöht.
Auf diese Weise erhalten Sie die Punkte, an denen der blaue Kreis die beiden roten Kreise genauer berührt als bei der Iteration.
Jedoch. Es gibt verschiedene Situationen, in denen Sie die falsche oder keine Antwort erhalten, wenn Sie dies nur tun. dh
1 oder keine Kreise
2 oder mehr Kreise, aber mit einem weit entfernten und außerhalb davon liegenden Zielpunkt.
viele Kreise, aber mit einem Zielpunkt nahe an der Oberfläche