java - 用于二维噪声生成的参数随机函数

标签 java function random 2d procedural

我正在尝试生成无限随机地形。每次给定相同的种子,地形都应该生成相同的。

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

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

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

如果上面的函数可以包含某种种子,那将会很有帮助,使它: f(x,y,seed) = 随机数

我需要为每个 x,y 组合生成几个数字,但是一旦我有了上述函数,就应该很容易导出其他数字。这些将用于决定地形的高度,以及将出现的特征(建筑物、树木)。

请不要提及 Perlin Noise 或其他此类方法。我的问题不是让噪音看起来不错,而是获得可靠的“随机”噪音。

谢谢, 杰米。

最佳答案

您正在寻找哈希函数。尝试其中之一:

http://www.concentric.net/~ttwang/tech/inthash.htm

下面是示例用法:

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)));
}

而且,它看起来像这样:

noise

关于java - 用于二维噪声生成的参数随机函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746743/

相关文章:

Java : A query about jar files

java - 如何在 Spring MVC 中从 Controller 调用组件或服务

java - 如何给出 Java 包中的音乐文件的路径?

Javascript 函数检查日期

java - 基于当前值的加权随机性(不知道如何解释)

java - 获取方法返回值

php - 将 array 中的参数传递给构造函数

ios - 观察观察者单个事件中的单个事件

random - 如何使用兰德 crate 更换发电机?

c# - 计算百分比分布中的下一个项目