随机角度发生器

时间:2010-07-01 19:10:50

标签: c# java xna

我有一个60deg的角度,想要在区间内生成随机角度[-120,120],其中区间以60度为中心,现在是[-60,180]

我的代码如下:

http://www.cs.princeton.edu/introcs/22library/StdRandom.java.html

我很困惑因为它说高斯分布在[0,1]之内。

我怎么能超越范围[-120,120]?

60角是物体的相对旋转,生成的随机角度是它下一个位置的预测

在测试代码时我有角度,比如65,55,如果我直接使用这个角度它会执行奇怪的事情,所以我采取65-60,55-60的差异。

这个想法是否正确?

4 个答案:

答案 0 :(得分:7)

如果您的随机数范围为0到1,则可以使用以下方法将其转换为-120到120;

rand_num*240 - 120

更一般地说,将[A,B]范围内的任何数字转换为[C,D]范围包括:

num * (D-C)/(B-A) + C

然而,我不确定你的意思是什么意思。


如果你想要一个从每个方向延伸120的范围,从60开始,你可以做以上操作并添加60,或使用范围[60-120,60+120] = [-60,180]

从这个意义上说,你有

rand_num * 240 - 60

遵循上面给出的公式

答案 1 :(得分:2)

static void Main(string[] args)
{
    Random rand = new Random();
    double a = 0;
    for (int i = 0; i < 1000; i++)
    {
        double r = rand.NextDouble() * 240 - 60;
        a += r;
        Console.WriteLine(string.Format("ang:{0,6:0.0}  avg:{1,5:0.0}", r, a / (i + 1)));
    }
    Console.ReadKey();
}

答案 2 :(得分:0)

如果你有一些在[0,1]等范围内生成随机数的东西,很容易将它转换为另一个范围,例如[-120,120]:你只需要乘以目标的大小范围(在这种情况下为240)并添加目标范围的开始(在这种情况下为-120)。

所以,例如:

java.util.Random random = new java.util.Random();

// Generate a random number in the range [-120, 120]
double value = random.nextDouble() * 240.0 - 120.0;

您使用StdRandom课程有特殊原因吗?随机数的分布是否必须是高斯分布? (没关系,上面的内容仍然有效)。

如果它必须以60为中心,那么只需添加60。

答案 3 :(得分:0)

试试这个:

import java.lang.Math;

public static void main(String[] args)
{
    System.out.println((int)(Math.random()*(-240))+120);
}

您将C#和Java标记为标记。有点想弄清楚你想要哪一个。

我比java.utils中的Random类更喜欢这个,因为你不必实例化一个类。您需要的一切都在Math类的静态方法中。

故障:

return Math.random(); // returns a double value [0, 1]

return Math.random()*-240; // returns a double value from [-240, 0]

return (int)(Math.random()*-240); // returns an integer value from [-240, 0]

return (int)(Math.random()*-240) + 120; // returns an integer value from [-120, 120]