我有一个200行200列的网格。 我想通过使用数字种子生成随机的坐标对i,j。这个种子是我每次生成一对数字时递增的值。
在生成40,000个值之后,所有坐标对之间都是唯一的,因为没有i,j和m,n,其中i = m且j = n。
例如:
seed 0: generates 43,12
seed 1: generates 154, 62
依此类推......
种子意味着相同的输入具有相同的功能会产生相同的结果,我很好。
我知道我需要某种伪随机算法,因为使用计算机时间或某些东西可能会生成两个相同的对,但我从哪里开始?
答案 0 :(得分:1)
如果你希望每个种子返回一个随机点,并且所有这些点都是唯一的,那么最简单的方法就是将这些点放在一个数组中,对数组进行洗牌,然后使用整数种子来索引洗牌阵。例如,seed=0
可以获得任何被移动到第一个位置的元素。
让我更容易让整数表示对,所以从0到40000(即200x200)创建一个数组,将其洗牌,然后使用0到40000范围内的种子。要转换整数, n
,点对使用,i=n%200
和j=(n-i)/200
。
当然,由于您希望每个种子返回一个唯一的点,您必须拥有与点数相等或更少的种子,
答案 1 :(得分:-1)
您需要一个随机数生成器,您可以为其设置种子值。好像你已经意识到了这一点。你不能为Math.random()
设置种子,但那里有很多伪随机数生成器。我建议你看一下seedrandom.js。