2012-02-20 231 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);