2010-07-01 120 views
0

我有一个角度说60deg和要生成间隔内随机角度说[-120,120]其中的间隔60deg这是现在为中心[-60,180]随机角度发生器

我有下面这样的代码:

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

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

我怎么能通过范围[-120,120]?

60角是一个对象的相对旋转所产生的随机角度是它的一个预测的下一个现在的位置是

当测试我有角度的代码,说65,55如果我使用此角度直接它执行似有所以我选择了65-60,55-60的区别。

这个想法是否正确?

+4

[-120,-120]在0 – 2010-07-01 19:12:17

+1

也许你的意思是你要居中,平均为60?如果是这样,请编辑您的问题相应 – 2010-07-01 19:13:21

回答

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 

从上方

+0

感谢这个公式 – tasyjean 2010-07-01 20:13:17

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

+0

我使用高斯从标准差 受益,所以我可以从控制中心 传播我想我可以在你的代码 多个它与STDEV做到这一点 – tasyjean 2010-07-01 20:19:15

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(); 
} 
0

试试这个:

import java.lang.Math; 

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

你有C#和Java标记为标签。弄清楚你想要哪一个,会感到困惑。

我比较喜欢java中的Random类。utils,因为你不必实例化一个类。你需要的一切都在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]