raR*_*aRa 7 random algorithm math terrain level-of-detail
我需要一个伪随机数生成器,它从float类型的两个输入中给出一个范围[-1,1](范围是可选的)中的数字.
我也会尝试解释为什么需要它:
我正在使用Diamond-Square算法为我的地形引擎创建高度贴图.地形被分成补丁(Chunked LOD).
Diamond-Square的问题在于它使用随机函数,所以假设两个邻居补丁共享相同的点(x,z)然后我希望它们的高度相同,这样我就不会得到一些破解影响.
有人可能会说我可以从邻居补丁中获取高度信息,但是在首先创建补丁之后结果可能会有所不同.
这就是为什么我需要一个伪数发生器,它返回一个给定两个输入的唯一数字,即(x,z).
(我不是要求别人写这样的功能,我只需要一般反馈和/或类似的已知算法).
您需要类似于 pair 上的散列函数的东西(x, z)。
我会建议像
(a * x + b * z + c) ^ d
其中所有数字都是整数,a并且b是大素数,因此整数乘法溢出,c并且d是一些随机整数。^是按位异或。结果是一个随机整数,您可以将其缩放到所需范围。
这假设地图不用于了解地形具有重要价值的游戏中,因为这样的功能对于保密是不安全的。在这种情况下,您最好使用一些加密功能。