Habe die Schreibweisen wie ihr es vorgeschlagen habt gleich überall im Programm geändert, macht einfach mehr Sinn.
@Sir Rufo:
Delphi/Windows bringt von Haus aus schon Routinen mit um mit Flächen zu arbeiten.
z.B.
IntersectRect
Merk dir also zu jedem Kreis (in einem Array) die Fläche, die dieser Kreis belegt und prüfe diese Liste der Flächen
war glaub ich ein wirklich guter Tipp. Allerdings konnte ich keine entsprechende Funktion für Kreise finden. Ich könnte zwar für jeden Kreis noch ein temporäres Rechteck erstellen, um damit zu rechnen, aber das ist keine sehr elegante Lösung.
Aber im Prinzip müsste es doch so in der Richtung gehen:
*Pseudo-Code*
Delphi-Quellcode:
For I:=1 To AnzahlDerKreise Do
Begin
Überprüfe überschneidung Kreis(I) und NeuerKreis
If KeineÜberschneidung Then Kreis kann gezeichnet werden
End;
Allerdings wäre das ja auch nicht ganz das gelbe vom Ei, denn dann würde das Programm ja solange immer wieder an zufälligen Positionen versuchen, einen Kreis zu zeichnen, bis es irgendwann passt. Besser wäre ja, wenn es ermitteln würde, wo ein Kreis hinpasst und dann eine zufällige Position davon aussuchen würde oder nicht? Das war ja das Ziel von
X:=Frei[Random(K)]; //Frei ist das Array mit freien Plätzen
Ich weiß allerdings nicht, wie ich das hiermit umsetzen soll. Meint ihr, es ist der richtige Weg, wenn ich in der Richtung weitermache?