生成三维随机数空间的算法

oyo*_*ant 2 java random algorithm math

我正在寻找一种算法,在大范围的三个(或更好的n)维空间中生成伪随机数.当用种子初始化时,发生器应该能够为同一种子重复产生相同的数字.

但与编程语言中可用的大多数生成器不同,它不应仅返回序列中的下一个随机数,而是生成特定坐标的数字,无论请求的值是什么顺序.

应该认为空间的大小太大,无法在初始化时生成所有数字.在Java中它可能看起来像这样:

Random3D gen = new Random3D(seed);
int n1 = gen.getInt(3,0,6);
int n2 = gen.getInt(2,-3,1);
...
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

我通过使用java.util.Random编写一些代码在Java中尝试过,但结果的质量不是很好.

wol*_*ajr 5

如果你想为同一个coordenate收到总是相同的结果,当你指定种子时,你不是在寻找一个真正的随机生成器.

你想要一个快速算法,一个可靠的算法吗?对于一个快速的,看看梅森捻线机.对于一个更强壮的人,你可以看看Blum Blum Shub.

您可以使用n维坐标和种子来生成伪随机数生成器.例如,您可以计算sha1或md5或坐标+种子的任何其他散列,并在PRNG中使用它.

编辑:对于一个简单的解决方案,math.random可以接收48位(小于md5输出)的种子,对于你的问题可能有点小(你提到有高维度,对吗?有大坐标?)