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