gpt4 book ai didi

algorithm - 以 x,y 坐标为种子的随机数生成器

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:36 24 4
gpt4 key购买 nike

我正在寻找一种高效、均匀分布的 PRNG,它可以为平面中的任意整数点生成一个随机整数,坐标 x 和 y 作为函数的输入。

int rand(int x, int y)

每次输入相同的坐标时,它必须提供相同的随机数。

您是否知道可用于此类问题以及更高维度的算法?

我已经尝试使用像 LFSR 这样的普通 PRNG,并将 x、y 坐标合并在一起以将其用作种子值。像这样。

int seed = x << 16 | (y & 0xFFFF)

此方法的明显问题是种子没有迭代多次,而是针对每个 x,y 点再次初始化。如果您可视化结果,这会导致非常难看的非随机模式。

我已经知道使用某种大小(如 256)的随机排列表的方法,你可以像这样从中得到一个随机整数。

int r = P[x + P[y & 255] & 255];

但我不想用这种方法,因为范围非常有限,周期长度受限,内存消耗大。

感谢任何有用的建议!

最佳答案

我在xxhash算法的基础上找到了一个非常简单、快速、足够的哈希函数。

// cash stands for chaos hash :D
int cash(int x, int y){
int h = seed + x*374761393 + y*668265263; //all constants are prime
h = (h^(h >> 13))*1274126177;
return h^(h >> 16);
}

它现在比我上面描述的查找表方法快得多,而且看起来同样随机。我不知道与 xxhash 相比,随机属性是否好,但只要它看起来随机,就我的目的而言,它是一个公平的解决方案。

这是以像素坐标作为输入的样子:

enter image description here

关于algorithm - 以 x,y 坐标为种子的随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com