具有 3 个输入的随机数生成器

Random number generator with 3 inputs

我正在为地形生成器寻找具有 3 个输入的随机数生成器。输入是 x、y(位置)和种子值。并且函数 returns 返回一个从 0-1 的随机数。

到目前为止,我找到了 个问题,但这有 2 个输入。虽然我可以将 x 和 y 组合成一个数字,以获得两个输入,但这将限制我对 x、y 的选择,因为它们需要足够大(地形是无限的)。

是否有接受 3 个输入的随机函数,或者我是否需要最终使用 2 个输入版本?

像这样的东西应该有用。它采用三个 32 位整数,并输出一个 32 位整数。如果要将输出变成 0 到 1 之间的双精度数,只需除以 UINT32_MAX.

可以调整输入和输出大小。

您还可以调整输出质量和速度之间的平衡。你会注意到中间部分只是重复了 3 行,删除或添加更多行以使输出或多或少有偏差。

这是 C 代码。

uint32_t rotl32(uint32_t n, uint8_t k) {
  uint32_t a = n << k;
  uint32_t b = n >> (32 - k);
  return a | b;
}

uint32_t three_input_random(uint32_t x, uint32_t y, uint32_t z) {
  uint32_t a = x;
  uint32_t b = y;
  uint32_t c = z;

  b ^= rotl32(a + c, 7);
  c ^= rotl32(b + a, 9);
  a ^= rotl32(c + b, 18);
  b ^= rotl32(a + c, 7);
  c ^= rotl32(b + a, 9);
  a ^= rotl32(c + b, 18);
  b ^= rotl32(a + c, 7);
  c ^= rotl32(b + a, 9);
  a ^= rotl32(c + b, 18);

  return a + b + c + x + y + z;
}