Atualmente, estou trabalhando em um programa que deve gerar ruído aleatório em uma tela com base nas 'coordenadas' de um pixel. As coordenadas devem ter a mesma cor sempre que você reiniciar o programa. No entanto, usando o util.Random do Java, os resultados obtidos não são tão aleatórios quanto eu gostaria:
Eu pensei que se eu usasse as coordenadas combinadas (como em um número inteiro formado pelas duas coordenadas próximas umas das outras), cada coordenada teria um número diferente. Usando esse número como uma semente, eu esperava obter números aleatórios diferentes para cada coordenada para usar no valor rgb dessa coordenada.
Este é o código que eu usei:
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;
}
}
O padrão criado pelo programa é devido ao modo como a função Aleatória do java funciona ou estou fazendo algo errado e devo tentar uma abordagem diferente?
Atualização: Agora, tentei me livrar dos problemas relacionados à concatenação usando o seguinte código:
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;
}
De alguma forma, isso também forneceu uma (na minha opinião) imagem suficientemente aleatória:
Esse código, no entanto, é processado novamente três vezes por pixel. Mesmo que isso não seja um problema para mim no momento, considero alterar esse código caso precise de uma melhor performance posteriormente.