具有 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;
}
我正在为地形生成器寻找具有 3 个输入的随机数生成器。输入是 x、y(位置)和种子值。并且函数 returns 返回一个从 0-1 的随机数。
到目前为止,我找到了
是否有接受 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;
}