Software de aplicación de ruido Perlin.

He escrito una implementación de ruido Perlin 2D basada en información de aquí , aquí , aquí y aquí . Sin embargo, la salida se ve así.

public static double Perlin(double X, double XScale, double Y, double YScale, double Persistance, double Octaves) { double total=0.0; for(int i=0;i> 16)); uint m_w = (uint) (18000 * (Y & 65535) + (Y >> 16)); uint ou = (m_z << 16) + m_w; return ((ou + 1.0) * 2.328306435454494e-10); } 

Se agradece cualquier entrada sobre lo que está mal.

EDIT: encontré una manera de resolver esto: usé una matriz de dobles generada en la carga para solucionar este problema. Sin embargo, se aprecia cualquier forma de implementar un buen generador de números aleatorios.

Supongo que este efecto se debe a su función de ruido (todos los demás códigos se ven bien).

La función

 private static double Noise (int X, int Y) { uint m_z = (uint) (36969 * (X & 65535) + (X >> 16)); uint m_w = (uint) (18000 * (Y & 65535) + (Y >> 16)); uint ou = (m_z < < 16) + m_w; return ((ou + 1.0) * 2.328306435454494e-10); } 

no es muy ruidoso pero está fuertemente correlacionado con las variables de entrada X e Y Intente utilizar cualquier otra función pseudoaleatoria que introduzca con su entrada.

Reconstruí su código en C y siguiendo la sugerencia de @Howard y este código funciona bien para mí. No estoy seguro de qué función de Interpolar ha utilizado. Utilicé una interpolación lineal en mi código. Usé la siguiente función de ruido:

 static double Noise2(int x, int y) { int n = x + y * 57; n = (n< <13) ^ n; return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }