java - positivos - Función aleatoria paramétrica para la generación de ruido 2D
metodo random java (1)
Intento generar infinito terreno aleatorio. El terreno debe generar lo mismo cada vez que se le dé la misma semilla.
He intentado usar la función Aleatoria de Java, creando la semilla usando varias funciones de las coordenadas xey del nodo dado en la cuadrícula del terreno. Tales como x * y + x + y + semilla, 20 * x + 30 * y etc.
El problema con este enfoque es que siempre veo patrones claros en los números generados.
Entonces, básicamente, lo que quiero es: f (x, y) = Número aleatorio
Sería útil si la función anterior pudiera incluir una semilla de algún tipo, por lo que es: f (x, y, seed) = Número aleatorio
Necesitaré generar varios números para cada combinación x, y, pero debería ser bastante fácil obtener números adicionales una vez que tenga la función anterior. Estos servirán para determinar la altura del terreno y qué características (edificios, árboles) estarán presentes.
Por favor, no menciona el Perlin Noise u otros métodos similares. Mi problema no es hacer que el ruido se vea bien, es obtener ruido confiablemente "aleatorio".
Gracias, Jamie.
Usted está buscando la función hash. Prueba uno de esos:
http://www.concentric.net/~ttwang/tech/inthash.htm
Aquí hay un ejemplo de uso:
int hash32shift(int key)
{
key = ~key + (key << 15); // key = (key << 15) - key - 1;
key = key ^ (key >>> 12);
key = key + (key << 2);
key = key ^ (key >>> 4);
key = key * 2057; // key = (key + (key << 3)) + (key << 11);
key = key ^ (key >>> 16);
return key;
}
int noise(int x, int y, int seed)
{
return hash32shift(seed+hash32shift(x+hash32shift(y)));
}
Y, se ve así: