Java Zufalls-Verteil-Algorithmus

oOJavaNeulingOo

Bekanntes Mitglied
Moin!

ich hätte hier ne Frage. Ich schreibe (bzw, will schreiben - erst überleg ich wie ) eine kleine Applikation in Java. Allerdings müsste ich darin einen Algorithmus verwenden, welcher von einem bestimmtem Punkt aus eine zufällige Menge an Objekten verteilen soll - quasi in einen Raster.

Beispiel:


Die dicken Linien sind der Raster, die dünneren unterteilen die Raster-Kästchen noch einmal. Die Objekte, welche eine beliebige Zahl sein können, sollen nun um den Startpunkt herum verteilt werden(So nah wie möglich!) - allerdings sollten maximal 2 in einem Raster Kästchen, und maximal einer in einem Viertel-Raster-Kästchen Platz nehmen. Allerdings habe ich nicht gerade viele Ideen, da es ja alles zufällig geschehen muss - Und das ist eben das Problem!

MfG

PS: Die Anordnung soll halt so aussehen, wie als ob bei "startpunkt" eine Explosion stattgefunden hat, und somit drum herum verteilt.
 
Moin.

Meine erste Frage: Warum diese doppelte Unterteilung? Also Raster im Raster... ich würde stattdessen die Rasterung einfach entsprechend Fein machen.

Ich könnte mir vorstellen, dass du ein 2D-Array nimmst und entsprechend groß gestaltest.
Dein Beispiel entspräche einem 8x8 großem Array.
Dein Startpunkt sei x=4, y=5 im Array. Dein Explosionsradius r ist gleich 2 (Beispiel).
Nun könntest du den Bereich im Array von x-r bis x+r und y-r bis y+r als Streubereich betrachten (natürlich auf IndexOutOfBounds achten).
Du erzeugst jetzt mittels Java.util.Random Zufallspaarungen innerhalb dieses Wertebereiches und markierst diese Paare als belegt (Hier bietet sich an booleans zu benutzen).
Je mehr Paare du nimmst, desto mehr "Partikel" werden erzeugt. Kannst also ein wenig mit der "Dichte" spielen.

Wäre eine erste Lösung die vllt ja schon ausreicht für deine Zwecke. Falls nicht erkläre dich etwas genauer bitte.

Sollte diese Raster im Raster geschichte unbedingt von nöten sein, könntest du (wieder anhand deines Beispiels) ein 3D-Array nemen und die Tiefe mit 4 fix betrachten um eben die 4 Subfelder zu simulieren.

Grüße
 
- Wie viele Objekte sind es?
- Ist es zeitkritisch?

Wenn die Antworten "Wenige" und/oder "Nein" sind:
Java:
do
{
    placePointsRandomly();
} while (!pointDistributionNotValid());
 

Zurück
Oben