我想在單位圓上生成隨機點。這是做這件事的最好方法嗎?在.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);
我想在單位圓上生成隨機點。這是做這件事的最好方法嗎?在.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);
如果你創建在大約相同的兩個時間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
}
謝謝,這是有道理的。我實際上使用了一個共享的隨機數。對不起,如果這不清楚的問題。 –
那麼,在這種情況下,我看起來很好! –
像這樣:http://stackoverflow.com/questions/15318271/random-barely-randomming –
這將產生從-360度到360度的角度。這是兩次,所以不應該是'2 * Math.PI ...'? –
我乘以4因爲我認爲減去0.5會減少一半的隨機值,不是嗎? –