генератор случайных углов - PullRequest
0 голосов
/ 01 июля 2010

У меня есть угол, скажем, 60 градусов, и я хочу сгенерировать случайный угол в интервале, скажем, [-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 ]

7 голосов
/ 01 июля 2010

Если у вас есть случайное число с диапазоном от 0 до 1, вы можете преобразовать его в -120-120, используя:

rand_num*240 - 120

В целом, преобразовывая любое число в диапазоне [A, B]диапазон [C, D] включает в себя:

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

Однако я не уверен, что вы имеете в виду, сохраняя свое среднее значение.в каждом направлении, начиная с 60, вы можете либо выполнить вышеизложенное и добавить 60, либо использовать диапазон [60-120,60+120] = [-60,180]

В этом смысле у вас будет

rand_num * 240 - 60

следует из приведенной выше формулы

2 голосов
/ 01 июля 2010
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 голосов
/ 02 июля 2010

Попробуйте:

import java.lang.Math;

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

У вас есть C # и Java, помеченные как теги.Как-то не понятно, какой из них вам нужен.

Я предпочитаю это классу Random в java.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]
0 голосов
/ 01 июля 2010

Если у вас есть что-то, что генерирует случайные числа в диапазоне, например [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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...