Ich arbeite derzeit an einem Programm, das zufälliges Rauschen auf einem Bildschirm basierend auf den 'Koordinaten' eines Pixels erzeugen soll. Die Koordinaten sollten bei jedem Neustart des Programms dieselbe Farbe haben. Wenn ich jedoch das util.Random von Java verwende, sind die Ergebnisse, die ich erhalte, nicht so zufällig, wie ich es gerne hätte:
Ich dachte, wenn ich die kombinierten Koordinaten verwenden würde (wie in einer ganzen Zahl, die aus beiden Koordinaten nebeneinander gebildet wird), hätte jede Koordinate eine andere Nummer. Indem ich diese Zahl als Startwert verwendete, erwartete ich, dass ich für jede Koordinate eine andere Zufallszahl für den RGB-Wert dieser Koordinate erhalten würde.
Dies ist der Code, den ich verwendet habe:
public class Generate {
static Random Random;
public static int TileColor(int x, int y){
Random = new Random(Integer.valueOf(Integer.toString(x)+Integer.toString(y)));
int b = 1 + Random.nextInt(50);
int g = 1 + Random.nextInt(50);
int r = 1 + Random.nextInt(50);
int color = -Color.rgb888(r, g, b);
return color;
}
}
Liegt das Muster, das das Programm erstellt, an der Funktionsweise der Zufallsfunktion von Java, oder mache ich etwas falsch und sollte ich einen anderen Ansatz wählen?
Update: Ich habe jetzt versucht, die Probleme mit der Verkettung mithilfe des folgenden Codes zu beseitigen:
public static int TileColor(int x, int y){
Randomy = new Random(y);
Randomx = new Random(x);
Random = new Random(Integer.valueOf(Integer.toString(Randomx.nextInt(1234))+Integer.toString(Randomy.nextInt(1234))));
int b = 1 + Random.nextInt(100);
int g = 1 + Random.nextInt(100);
int r = 1 + Random.nextInt(100);
int color = -Color.rgb888(r, g, b);
return color;
}
Irgendwie lieferte dies auch ein (meiner Meinung nach) ausreichend zufälliges Bild:
Dieser Code wird jedoch dreimal pro Pixel neu berechnet. Obwohl dies für mich derzeit kein Problem ist, überlege ich mir, diesen Code zu ändern, falls ich später eine bessere Leistung benötige.