种子

 
 
 

设置 gauss、rand 和 sphrand 函数用于生成随机数的种子值。如果为 seed 指定一个值,然后反复执行 gauss、rand 和 sphrand 函数,将生成相同的随机数序列。有关说明,请参见下面的示例和重新生成随机性

int seed(int number)

number 设置要用作种子值的任意数字。

示例

假设创建一个名为 Ball 的 NURBS 球体,然后输入以下表达式:

Ball.translateX = rand(5);

在回放动画时,Ball 的 translateX 属性会收到一个介于 0 和 5 之间的随机值,例如 1.392。在播放动画时,translateX 属性会对每个帧收到一个介于 0 和 5 之间的不同随机值。

再次回放动画时,translateX 属性会收到一个不同于第一次回放时所收到值的值,例如 3.223。

再次播放动画时,translateX 属性会对每个帧收到一个不同于它在第一次播放动画时所收到值的值。简而言之,每次 rand (5) 执行时,它都会产生不同的随机值。

假设您将表达式更改为以下表达式:

if (frame == 1)
	seed(1);
Ball.translateX = rand(5);

将场景回放到帧 1 会执行 seed (1) 函数。然后,它为 translateX 指定一个介于 0 和 5 之间的随机值,例如 4.501。

在播放动画时,rand (5) 函数会执行每个帧,并返回一个不同的值。下面是所返回值的示例:

1 4.501
2 3.863
3 3.202
4 3.735
5 2.726
6 0.101

每次回放和播放动画时,translateX 都会收到同一随机值序列。

对于不同的种子值,返回的数字序列将有所不同。您无法基于种子值预测数字序列中的值。

假设您将表达式更改为以下表达式:

if (frame == 1)
	seed(500);
Ball.translateX = rand(5);

rand (5) 函数在您回放和播放动画时返回这些值:

1 4.725
2 2.628
3 0.189
4 0.004
5 4.834
6 0.775

通过更改 seed 函数的值,可以更改生成的随机数序列。

使用以下 seed 函数时的常见错误:

seed(1);
Ball.translateX = rand(5);

在回放动画时,Ball 的 translateX 属性会收到值 4.501。在播放动画时,translateX 属性会在每次表达式执行时收到 4.501。

由于您在每次执行 rand (5) 之前为 seed 指定值 (1),因此这将初始化随机数序列。因此,在每次执行 rand (5) 函数时,它会返回数字序列的第一个值。

重要信息

在表达式或 MEL 脚本中设置某个种子值时,该种子值会影响其他表达式和 MEL 脚本中的 rand、sphrand 和 gauss 函数。在您随后在当前工作会话中打开的所有场景中,此类函数将受到该种子值的影响。