Java 二维噪声产生的参数随机函数

Java 二维噪声产生的参数随机函数,java,function,random,2d,procedural,Java,Function,Random,2d,Procedural,我试图生成无限的随机地形。每次给定相同的种子时,地形应生成相同的种子 我尝试使用Java的Random函数,使用地形网格上给定节点的x和y坐标的各种函数创建种子。例如x*y+x+y+种子、20*x+30*y等 这种方法的问题在于,我总能在生成的数字中看到清晰的模式 所以基本上我想要的是: f(x,y)=随机数 如果上述函数可以包含某种类型的种子,则会很有帮助,使其: f(x,y,种子)=随机数 我需要为每个x,y组合生成几个数字,但是一旦我有了上面的函数,就应该很容易得到额外的数字。这些将决定地

我试图生成无限的随机地形。每次给定相同的种子时,地形应生成相同的种子

我尝试使用Java的Random函数,使用地形网格上给定节点的x和y坐标的各种函数创建种子。例如x*y+x+y+种子、20*x+30*y等

这种方法的问题在于,我总能在生成的数字中看到清晰的模式

所以基本上我想要的是: f(x,y)=随机数

如果上述函数可以包含某种类型的种子,则会很有帮助,使其: f(x,y,种子)=随机数

我需要为每个x,y组合生成几个数字,但是一旦我有了上面的函数,就应该很容易得到额外的数字。这些将决定地形的高度,以及将呈现哪些特征(建筑物、树木)

请不要提及柏林噪音或其他此类方法。我的问题不是让噪音看起来很好,而是得到了可靠的“随机”噪音

谢谢,
Jamie.

您正在寻找哈希函数。试试下面的一种:

下面是使用示例:

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)));
}
int hash32shift(int键)
{
键=~键+(键>12);
键=键+(键>>4);
key=key*2057;//key=(key+(key>16);
返回键;
}
整数噪声(整数x,整数y,整数种子)
{
返回hash32shift(seed+hash32shift(x+hash32shift(y));
}
看起来是这样的:


您在java.util.Random生成的数字中看到了清晰的模式吗?请详细说明这些模式是什么?地形中有模式,水平和垂直重复。您能上传这些模式的示例以及生成它们的代码吗?我对它相当感兴趣;这也是我的爱好之一。(以前也是我在一家研究公司工作过的。)我一到家就会试试这个,非常感谢。在我粘贴之前,我将不得不研究java操作符“>>>”的存在让我大吃一惊。我将其与随机函数结合使用,因此现在每个节点都有一系列随机数可供使用。:D为了避免混淆,我认为重复可能部分(但不是完全)是由于我写了一个错误的字典查找函数。然而,这只能解释一些对称性,而不能解释重复性。