Je travaille actuellement sur un programme qui devrait générer du bruit aléatoire sur un écran basé sur les «coordonnées» d'un pixel. Les coordonnées doivent avoir la même couleur à chaque redémarrage du programme. Cependant, en utilisant l'utilitaire Java, les résultats que j'obtiens ne sont pas aussi aléatoires que je le souhaiterais:
Je pensais que si j'utilisais les coordonnées combinées (comme dans un entier formé à partir des deux coordonnées l'une à côté de l'autre), chaque coordonnée aurait un nombre différent. En utilisant ce nombre comme graine, je m'attendais à obtenir un nombre aléatoire différent pour chaque coordonnée à utiliser pour la valeur RVB de cette coordonnée.
Voici le code que j'ai utilisé:
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;
}
}
Le modèle créé par le programme est-il dû au fonctionnement de la fonction aléatoire de Java ou est-ce que je fais quelque chose de mal et dois-je essayer une approche différente?
Mise à jour: j'ai maintenant essayé de me débarrasser des problèmes liés à la concaténation en utilisant le code suivant:
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;
}
D'une certaine manière, cela a également fourni (à mon avis) une image suffisamment aléatoire:
Ce code est cependant réensemencé trois fois par pixel. Même si ce n'est pas un problème pour moi en ce moment, j'envisage de changer ce code au cas où j'aurais besoin de meilleures performances plus tard.