我有一个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的差异。
这个想法是否正确?
答案 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]