提问人:Kotetsu Chan 提问时间:3/10/2022 更新时间:3/10/2022 访问量:446
具有 3 个输入的随机数发生器
Random number generator with 3 inputs
问:
我正在寻找一个带有 3 个输入的随机数生成器,用于地形生成器。输入是 x、y(位置)和种子值。该函数返回一个从 0-1 开始的随机数。
到目前为止,我找到了这个问题,但这有 2 个输入。虽然我可以将 x 和 y 组合成一个数字,以获得两个输入,但这将限制我对 x、y 的选择,因为它们需要足够大(地形是无限的)。
是否有任何随机函数接受 3 个输入,或者我最终需要使用 2 个输入版本?
答:
2赞
Leo
3/10/2022
#1
这样的事情应该可以工作。它采用三个 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;
}
评论
0赞
Anderson Green
6/10/2022
我在 GLSL 中发现了许多噪声函数的实现,也可以用于此目的。
评论