在.NET中随机化sin / cos函数的最佳方法是什么?

时间:2013-07-28 01:21:39

标签: c# .net math 3d trigonometry

我想在单位圆上生成随机点。这是最好的方法吗?

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

1 个答案:

答案 0 :(得分: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
}