1

我正在处理中制作动画。我有一些随机点随机移动然后形成一个实体。由于动画太慢,我正在考虑保存帧,然后将它们添加到电影中。

我需要运行相同的程序两次或更多次,所以我使用的是 Random 类而不是 Processing 的 random() 函数,但我不明白种子参数的含义。

我应该把什么作为种子?这种随机方法是否均匀分布?

4

3 回答 3

2

你把什么作为种子并不重要。实际上最好让它无参数,因为这样它每次都会选择不同的种子。如果您明确指定种子,您将收到随机行为......但每次运行时都会出现相同的随机行为!

这是因为随机数生成器实际上在逻辑上不是随机的。它们是伪随机的,因为它们是通过算法生成的。种子是该算法的一部分。基本上,该算法将在该范围内产生均匀分布的数字(事实上,即使是 PRNG 也经常被批评为不够随机

PRNG 可以使用种子状态从任意起始状态开始。此后,当使用该状态初始化时,它将始终产生相同的序列。

来自维基百科

于 2012-10-08T18:08:34.383 回答
2

尝试

new Random(System.currentTimeMillis());

它几乎每次都会给你不同的种子。不知道够不够,但绝对比常数种子好。

虽然,当你做 new Random()

 public Random() { this(++seedUniquifier + System.nanoTime()); }

这就是发生的事情,所以我建议你尝试一下,这对你更好。

于 2012-10-08T18:15:57.977 回答
1

如果您查看Random 类的 JavaDoc,您会发现您需要调用特定方法、nextInt()、nextFloat() 等来获得均匀或高斯分布。如果您希望您的结果是可重复的,您应该为种子使用一个常数值。否则,如果您希望每次运行时结果都不同,我同意时间是播种它的好方法。

于 2012-10-08T19:01:24.123 回答