Генерация N точек в квадрате (равномерно)

Я хочу создать N точек в квадрате (равномерно). как я могу этого достичь?

1 ответ

Решение

Довольно крутая проблема, и намного сложнее, чем я себе представлял, но вот идея. Есть бумаги по этому поводу для n-гонов, но я просто сделаю квадрат. Таким образом, равномерное распределение по кругу является распространенной проблемой, и вы не можете просто выбрать радиус, rи угол, thetaнезависимо, так как больший радиус придается большему радиусу, т. е. если мы возьмем бесконечно малое кольцо, у вас будет больше области, идущей от большего радиуса дальше от центра, поэтому мы производим равномерную выборку из r^2 так как площадь является функцией r^2,

Теперь идея похожа на прямоугольник, его симметрия поддается захвату с некоторой мерой поворота (угла) и расстояния от начала координат (радиуса), но обратите внимание, что радиус резко меняется при вращении вокруг круга, поднимается вверх, затем вниз затем вверх, затем вниз. нам нужен способ задать радиус на основе угла, чтобы его масса в любой заданной точке была равномерной.

Рассмотрим следующую конструкцию (мы можем сориентировать квадрат так, чтобы он располагался на одной из его сторон, но это более интуитивно понятно) Извините, мои диаграммы плохо нарисованы

                             A

                                  X

                  B          O          C



                             D

Вот наш квадрат, где A,B,C,D - углы, а O - источник. Мы объясним X позже. Давайте начнем с точки C и вращаемся против часовой стрелки, и угол будет обозначаться как Theta. X - точка пересечения с краем квадрата, если мы рисуем линию от O с углом Theta. Другими словами, X = r(тета). То, что мы пытаемся сделать, это зафиксировать расстояние r как функцию тета, чтобы сделать это равномерным распределением вероятности тета. Вот и вся идея..

мы можем написать следующее с законом синусов

Sin(pi - Theta - pi/4)/c = sin(pi/4)/r(Theta) where C sits at (c,0)

сделать некоторую алгебру и прийти к

r(Theta) = sqrt(2)*c / (2sin(3pi/4 - Theta)

теперь нам нужна константа k такая, что интегрирование k*r(Theta) даст вам 1, что вы можете легко сделать.

я получил

a*sin(pi/4)ln|tan((Theta+pi/4)/2)| evaluated from 0 to pi/4

Вы успешно создали pdf (функцию распределения вероятностей) для своего r(Theta), теперь вычислите cdf (функцию кумулятивного распределения), установите его равным и получите выражение для закрытой формы для вашей Theta.

до сих пор мы построили случайную тэту, чтобы построить радиус r, понять, что так же, как круг, у нас больше массы, и мы можем построить его как

R = r(Theta)/s где s равномерно от 0 до 1.

мы используем r(Theta) потому что это максимально возможное значение, данное Тета.

Другие вопросы по тегам