C# 随机角发生器

C# 随机角发生器,c#,java,xna,C#,Java,Xna,我有一个角度,比如说60度,想要在间隔内生成随机角度,比如说[-120120],其中间隔以60度为中心,现在是[-60180] 我有以下代码: 我很困惑,因为据说高斯分布在[0,1]之内 我怎样才能通过范围[-120120] 60度角是对象的相对旋转,生成的随机角度是其下一个位置的预测 当测试代码时,我有角度,比如说65,55,如果我直接使用这个角度,它会执行奇怪的操作,所以我取差65-60,55-60 这个想法正确吗?如果您有一个范围为0到1的随机数,您可以使用以下方法将其转换为-120到12

我有一个角度,比如说60度,想要在间隔内生成随机角度,比如说[-120120],其中间隔以60度为中心,现在是[-60180]

我有以下代码:

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

我怎样才能通过范围[-120120]

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

当测试代码时,我有角度,比如说65,55,如果我直接使用这个角度,它会执行奇怪的操作,所以我取差65-60,55-60


这个想法正确吗?

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

rand_num*240 - 120
更一般地说,将[A,B]范围内的任何数字转换为[C,D]范围涉及:

num * (D-C)/(B-A) + C
然而,我不知道你保持你的意思是什么

如果希望范围从60向每个方向延伸120,可以执行上述操作并添加60,或者使用范围[60-120,60+120]=[-60180]

从这个意义上说,你应该

rand_num * 240 - 60

根据上面给出的公式

如果你有一个能在[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即可。

尝试以下操作:

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();
}
import java.lang.Math;

public static void main(String[] args)
{
    System.out.println((int)(Math.random()*(-240))+120);
}
您将C和Java标记为标记。搞不清楚你想要哪一个

我更喜欢java.utils中的随机类,因为您不必实例化类。你需要的一切都在数学课的静态方法中

细分:

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]

也许你的意思是你希望平均值是60?如果是这样的话,请根据编辑你的问题。我使用高斯函数从标准差中获益,这样我就可以从中心控制扩散。我想我可以在你的代码中通过使用stdev来实现这一点