Es ist möglich, es schneller zu machen. Nach Ihrer Stichprobe ist es egal (und wir dürfen nicht schätzen), ob es einen Kreis oder ein Quadrat gibt.
Unter der Annahme, dass es eine Zwei dimention 0-basierten Array der Radius einfach sein wird, die die Anzahl der Nicht-Null (nicht leer) Zeilen (oder Spalten), dividiert durch 2.
Algo.
Findet die Anzahl der Nicht-Null-Reihen und ihren ersten (oben) Index. Teilen Sie diese Zahl durch zwei und addieren Sie die Anzahl der Nullzeilen mit Indizes kleiner als die niedrigste Zeile ungleich Null. Jetzt kennen Sie die Koordinaten radius
und y
.
Suchen Sie die erste (linke) Spalte ungleich Null und fügen Sie den Radius zu ihrem Index hinzu. Jetzt haben Sie die x
Koordinate.
In dem mitgelieferten Beispiel.
- Die Anzahl der Nicht-Null-Zeilen ist 8. Die
radius
ist 8/2 = 4. Es sind 0 Zeilen nach oben, bevor die Nicht-Null-Zeilen (in anderen Worten, die ID des ersten nicht Nullzeile ist 0). Die y
Koordinate ist also 0 + 4 = 4.
- Es gibt 0 leere Spalten links von der ersten Nicht-Null-Spalte (oder die ID der ersten Nicht-Null-Spalte ist 0). Die
x
Koordinate wird 4 + 0 = 4.
Um zu wissen, ob die Spalte Null ist, dass Sie eine Funktion wie diese verwenden:
IsEmpty := true;
for i := 0 to High(Column) do
if Column[i] > 0 then
begin
IsEmpty := false;
Break;
end;
Das Beispiel Sie gab keinen mittleren oder ein Normaler Radius, –
Siehe [Mittelpunkt-Kreis-Algorithmus] (https: //en.wikipedia.org/wiki/Midpoint_circle_algorithm # Optimierung). –
Bevor Sie nach einem Algorithmus suchen, müssen Sie zuerst die Bedeutung von Mitte und Radius ansprechen. Es hängt davon ab, ob Sie eine Ganzzahl oder ein Doppel als Werte für Mittelpunkt und Radius haben möchten. Wie Sie mit Brüchen umgehen und wie viel Unschärfe Sie zulassen usw. Es gibt mehrere Algorithmen, die das tun, aber alle mit Annahmen. –