2012-02-20 160 views
0

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

+0

已经有几个问题在这个题目上SO .... – 2012-02-20 04:51:05

+0

其实,我已经编程了5年或6年,而我只是有一个简单的数学问题。除非你有什么有用的补充,否则评论不值得赞赏。 – Jack 2012-02-20 04:52:27

+0

@Jack积极的可能不是获得答案的最佳途径我已经过了一半的时间了.. – Marty 2012-02-20 04:53:21

回答

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] 
} 
+0

完美的作品,谢谢! – Jack 2012-02-20 08:49:51

0

您还可以使用的东西沿着以下行,如果你需要一个“畅通“分配。即分布将在最低值和最高值之间逐渐变化,下面情况的重点将在较低值上。

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

你可以,当然,使用任何其他功能(夸张,或正弦波等)产生稍微不同的变化。一个有趣的事情,但。如果您正在使用任何补间引擎 - 您可能已经拥有这些功能!任何非线性应用于Math.random()输出的缓动函数都会以“平滑”方式影响分配。因此,例如,如果你看到宽松函数做了类似“起初变慢,但后来变得更快,更快,甚至更快”的东西,那就意味着你可以用它实现的分配会偏向于较小的数字和较大的数字会较少发生。

0

我会使用penner方程之一。 http://www.robertpenner.com/easing/

生成数0和1之间 把它交给彭纳方程,它会被你想要的最大值返回0和1 这个数字乘以之间的数字。 倒圆角。

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

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

是0-1之间返回数字0-1之间的输入将工作的任何其它功能:

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