Obecnie pracuję nad programem, który powinien generować losowy szum na ekranie na podstawie „współrzędnych” piksela. Współrzędne powinny mieć ten sam kolor przy każdym ponownym uruchomieniu programu. Jednak korzystając z Java.Random, wyniki, które otrzymuję, nie są tak losowe, jak bym chciał:
Pomyślałem, że jeśli użyję połączonych współrzędnych (jak w jednej liczbie całkowitej utworzonej z obu współrzędnych obok siebie), każda ze współrzędnych będzie miała inną liczbę. Korzystając z tej liczby jako zarodka, spodziewałem się uzyskać różne liczby losowe dla każdej współrzędnej do użycia dla wartości rgb tej współrzędnej.
Oto kod, którego użyłem:
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;
}
}
Czy wzorzec, który program tworzy, wynika ze sposobu, w jaki działa funkcja Random w Javie, czy robię coś źle i czy powinienem spróbować zastosować inne podejście?
Aktualizacja: próbowałem teraz pozbyć się problemów związanych z konkatenacją, używając następującego kodu:
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;
}
W jakiś sposób zapewniło to (moim zdaniem) wystarczająco losowy obraz:
Ten kod jest jednak resetowany trzy razy na piksel. Mimo że obecnie nie jest to dla mnie problemem, rozważam zmianę tego kodu na wypadek, gdyby później potrzebowałem lepszej wydajności.