概率随机数?

时间:2012-02-20 04:48:42

标签: flash random flash-cs5 actionscript-3

所以,我有一个问题。基本上,我没有在高中数学中给予足够的重视,现在我被卡住了。我需要生成1到20之间的随机数,重点强调1到5之间的一个,轻点强调5-10,低重点10-20。我不明白所有奇特的概率词和他们在我遇到的文章中所说的所有内容。你们可以提供的任何帮助将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用此公式生成[低,高]范围内的随机数:

var randomNumber:int = Math.floor(Math.random()*(1+high-low))+low;

如果你愿意,可以把它放在一个函数中。

现在,为您提供的三个区间提供不同概率的简单方法是执行以下操作:

var random:Number = Math.random();
if (random < 0.75) {
    // generate random number in [1, 5]
} else if (random < 0.95) {
    // generate random number in [6, 10]
} else {
    // generate random number in [11, 20]
}

答案 1 :(得分:0)

如果您需要“平滑”分发,您还可以使用下面的内容。即分布在最低值和最高值之间逐渐变化,下面的重点将是较低的值。

    private function univenlyDistributedRandom(low:int, high:int):Number
    {
        return low + (1 - Math.pow(Math.random(), 4)) * (high - low);           
    }

当然,您可以使用任何其他功能(夸张或正弦等)来生成稍微不同的变体。但有趣的是。如果您使用任何类型的补间引擎 - 您可能已经拥有这些功能!任何非线性应用于Math.random()输出的缓动函数都会以“平滑”的方式影响分布。因此,例如,如果您看到缓动函数执行的操作类似于“它一开始变慢,然后更快,更快,甚至更快”,这意味着您可以实现的分配将偏向于较小的数字和较大的数字会少发生。

答案 2 :(得分:0)

我会使用其中一个penner方程式。 http://www.robertpenner.com/easing/

生成介于0和1之间的数字。 将它赋予penner方程式,它将返回0到1之间的数字。 将此数字乘以所需的最大值。 围绕它。

number = Math.round(MyTransformFunction(Math.random())*MaxNumber)

function MyTransformFunction(x){
   return x*x;
}

对于0-1之间的输入,返回0到0之间的数字的任何其他函数都将起作用:

return -x*x;
return Math.sqrt(x);