2013-07-28 47 views
0

我想在單位圓上生成隨機點。這是做這件事的最好方法嗎?在.NET中隨機化sin/cos函數的最佳方法是什麼?

static Random rand = new Random(); 
float angle = 4 * Math.PI * (rand.NextDouble() - 0.5); 
float x = Math.Sin(angle); 
float y = Math.Cos(angle); 
+0

像這樣:http://stackoverflow.com/questions/15318271/random-barely-randomming –

+0

這將產生從-360度到360度的角度。這是兩次,所以不應該是'2 * Math.PI ...'? –

+0

我乘以4因爲我認爲減去0.5會減少一半的隨機值,不是嗎? –

回答

4

如果你創建在大約相同的兩個時間Random對象,他們將使用相同的種子,從而產生相同的隨機值。解決這個問題的簡單方法是使這個共享對象成爲Random。其次,雖然不那麼重要,但是4*pi是720度,而不是360度。您只需要做2 * Math.PI ...

private static readonly Random rand = new Random(); 

void DrawRandom() 
{ 
    float angle = 2 * Math.PI * (rand.NextDouble() - 0.5); 
    float x = Math.Sin(angle); 
    float y = Math.Cos(angle); 
    // do something 
} 
+0

謝謝,這是有道理的。我實際上使用了一個共享的隨機數。對不起,如果這不清楚的問題。 –

+0

那麼,在這種情況下,我看起來很好! –

相關問題