Здравствуйте, rus blood, Вы писали:
RB>Дан круг с центром в начале координат, и радиуса R. Нужно заполнять его случайными точками, равномерно, но при этом используя полярные координаты. Т.е. нужно случайно выбирать угол f и расстояние от центра r так, чтобы точки заполняли круг равномерно.
RB>1. Как это сделать? RB>2. Как это сделать, если в наличии имеется только ГСЧ с равномерным распределением (на заданном отрезке) ?
Давно головой не думал, всё руками. Надо попробовать.
Генерим угол f с помошью ГСЧ с равномерным распределением на отрезке [0, 2PI)
Далее, если мы возьмём растояние r с помошью ГСЧ с равномерным распределением на отрезке [0, R] (или [0, R), круг замкнутый, или нет? Впрочем, не важно), то точки будут заполнять круг не равномерно. Плотность точек будет одинакова на одинаковом растоянии от центра — по окружностям, и иметь обратную пропорциональную зависить от растояния до центра.
То есть, для расномерного заполения круга нам нужно генерить r на отрезке [0, R] с вероятностью, квадратично возрастающей на этом отрезке. (Как называется такое распределение?)
Для этого возмём случайную величину x с равномерным распределением на [0, 1], и получим искомую r = R * (1 — x*x). Всё. круг заполнится точками равномерно. Пользовались только равномерным распределением.
SW>Для этого возмём случайную величину x с равномерным распределением на [0, 1], и получим искомую r = R * (1 — x*x). Всё. круг заполнится точками равномерно. Пользовались только равномерным распределением.
SW>Я прав?
Нет, не прав. Например, если брать х случайно на отрезке [0,1], то половина точек должны быть меньше 1/2, а половина — больше. Это значит, что у половины точек радиус будет больше 3/4 * R, а другой половины — меньше. Но площадь круга с радиусом 3/4*R составляет 9/16 от площади всего круга. Т.е. распределение точек неравномерное.
Здравствуйте, rus blood, Вы писали:
SW>>Для этого возмём случайную величину x с равномерным распределением на [0, 1], и получим искомую r = R * (1 — x*x). Всё. круг заполнится точками равномерно. Пользовались только равномерным распределением.
SW>>Я прав? RB>Нет, не прав. Например, если брать х случайно на отрезке [0,1], то половина точек должны быть меньше 1/2, а половина — больше. Это значит, что у половины точек радиус будет больше 3/4 * R, а другой половины — меньше. Но площадь круга с радиусом 3/4*R составляет 9/16 от площади всего круга. Т.е. распределение точек неравномерное.
Ну вот, точно давно головой не думал. Два мне.
Действительно, (1 — x*x) нельзя назвать обратной функцией к x*x, а вот sqrt(x) можно Поэтому:
Оставляем все размышления в силе, но правильная формула будет r = R * sqrt(x), где sqrt(x) — квадратный корень x.
Хм, может я опять не прав, но проверку с делением пополам это проходит.
Обращаюсь за помощью ко всем, кто меня сейчас читает
Есть задачка, аналогичная рассматриваемой в данной теме: круг надо равномерно забросать точками, но уже в декартовой системе. Как это сделать? В теории вероятностей я пока плохо шарю, а решение нужно срочно.
Заранее всем благодарен!
Здравствуйте, Brother_2, Вы писали:
B_>Есть задачка, аналогичная рассматриваемой в данной теме: круг надо равномерно забросать точками, но уже в декартовой системе. Как это сделать? В теории вероятностей я пока плохо шарю, а решение нужно срочно.
А какая разница? Получаешь полярные координаты и пересчитываешь в декартовы.
И вообще, такая задача имеет стандартное решение.
Пусть длина вертикального среза фигуры — это функция h(x).
Для круга, очевидно, x^2+(h/2)^2 = r^2, то есть h = sqrt(r^2-x^2)*2
Интеграл H(x) = I(xmin,x) h(x)dx — это что-то вроде arctg, сейчас навскидку не скажу.
H(xmin)=0, H(xmax)=S — площадь фигуры.
x распределён так, что Н распределён равномерно.
Находим обратную функцию, x(H)
Диапазону значений H = [0;S] соответствует интегральная функция вероятности, P=[0;1]
Получив случайное значение H, находим x(H).
Теперь осталось найти y — он должен быть равномерно распределён на [ymin(x),ymax(x)], где ymax(x)-ymin(x)=h(x).
Здравствуйте, Brother_2, Вы писали:
B_>Есть задачка, аналогичная рассматриваемой в данной теме: круг надо равномерно забросать точками, но уже в декартовой системе.
Генеришь 2 случайных числа — Х и У координаты точки — если попала в круг — рисуешь, иначе выбрасываешь...
Т.е. заполняешь квадрат случайными точками равномерными, а потом вписываешь в квадрат окружность.