В настоящее время я работаю над программой, которая должна генерировать случайный шум на экране, основываясь на «координатах» пикселя. Координаты должны иметь одинаковый цвет при каждом перезапуске программы. Однако, используя утилиту Java.Random, результаты, которые я получаю, не так случайны, как хотелось бы:
Я думал, что если бы я использовал объединенные координаты (как в одном целом числе, сформированном из обеих координат рядом друг с другом), у каждой координаты был бы другой номер. Используя это число в качестве начального числа, я ожидал получить разные случайные числа для каждой координаты, чтобы использовать их для значения rgb этой координаты.
Это код, который я использовал:
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;
}
}
Является ли шаблон, который создает программа, из-за того, как работает функция java Random, или я делаю что-то не так, и мне следует попробовать другой подход?
Обновление: теперь я попытался избавиться от проблем, связанных с конкатенацией, используя следующий код:
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;
}
Каким-то образом это также дало (на мой взгляд) достаточно случайное изображение:
Этот код, однако, повторяется три раза на пиксель. Несмотря на то, что сейчас это не проблема для меня, я думаю об изменении этого кода на тот случай, если позже мне понадобится улучшенная производительность.