两个输入的伪随机数发生器

raR*_*aRa 7 random algorithm math terrain level-of-detail

我需要一个伪随机数生成器,它从float类型的两个输入中给出一个范围[-1,1](范围是可选的)中的数字.

我也会尝试解释为什么需要它:

我正在使用Diamond-Square算法为我的地形引擎创建高度贴图.地形被分成补丁(Chunked LOD).

Diamond-Square的问题在于它使用随机函数,所以假设两个邻居补丁共享相同的点(x,z)然后我希望它们的高度相同,这样我就不会得到一些破解影响.

有人可能会说我可以从邻居补丁中获取高度信息,但是在首先创建补丁之后结果可能会有所不同.

这就是为什么我需要一个伪数发生器,它返回一个给定两个输入的唯一数字,即(x,z).

(我不是要求别人写这样的功能,我只需要一般反馈和/或类似的已知算法).

sta*_*lue 5

您需要类似于 pair 上的散列函数的东西(x, z)

我会建议像

(a * x + b * z + c) ^ d

其中所有数字都是整数,a并且b是大素数,因此整数乘法溢出,c并且d是一些随机整数。^是按位异或。结果是一个随机整数,您可以将其缩放到所需范围。

这假设地图不用于了解地形具有重要价值的游戏中,因为这样的功能对于保密是不安全的。在这种情况下,您最好使用一些加密功能。