2013-05-17 2 views
3

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

Пусть наш прямоугольник будет ABCD

Моя идея: Разделите прямоугольник на два треугольника по диагонали AC. Найдите наклон и перехват диагонали. Затем сгенерируйте два случайных числа из интервала [0,1], пусть они будут a, b. Оценка x = a AB и y = b AD (AB, AD, расстояния). Если A не является (0,0), то мы можем добавить к координатам x и y A. Теперь мы имеем точку (x, y). Если он не находится в нижнем треугольнике (ABC), перейдите к следующему шагу. Иначе добавьте точку в наш график, а также добавьте симметричную (x, y) по отношению к диагонали АС, чтобы мы могли заполнить верхний треугольник (ADC).

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

Picture

+0

Можете ли вы рассказать о том, что вы подразумеваете под «случайной формой». Это не бесплатные идеи, и я могу представить несколько способов определения «равномерно случайных». Кроме того, переформатирование вашего объяснения проза вашего алгоритма в код psuedo поможет прояснить, что вы делаете немного. – ChrisCM

+0

«Случайная однородность» Я имею в виду, что я должен генерировать случайные числа, которые должны равномерно распределяться в области прямоугольника. –

+0

Какой у вас вопрос с вашим сюжетом, в частности? Я до сих пор не понимаю, как вы определяете однородность ... Униформа, в статистике/вероятности обычно просто относится к вероятности чего-то происходящего, а не к полученному распределению выбранных значений. Например, неравномерное распределение будет иметь более высокую вероятность точек в верхнем левом углу, но вы все равно можете получить результаты, которые выглядят так, как вы, они были бы менее «вероятными», так как нет высокой плотности точек в этом углу. – ChrisCM

ответ

5

Это называется point picking и другие подобные термины. Кажется, вы на правильном пути, что точки должны исходить из равномерного распределения. Ваш сюжет выглядит достаточно случайным для меня.

Что вы делаете с верхними и нижними треугольниками? Они кажутся ненужными и, безусловно, делают вещи менее случайными. Является ли это уменьшение дисперсии формы по линиям antithetic variates? Если @ Paddy3118 прав, вам действительно нужны только случайные точки, чтобы заполнить пробел, тогда вы должны посмотреть на low-discrepancy sequences. Halton sequence обобщает van der Corput sequence на несколько измерений. Если у вас есть Matlab's Statistics Toolbox, проверьте функции sobolset и haltonset или qrandstream и qrand.

11

Почему не только генерировать х = случайный ([A.x, B.x]) и у = случайная ([B.y, C.y]) и положить их вместе, как (х, у)? N-мерное равномерное распределение является просто произведением n равномерных распределений компонент.

1

Если вы находитесь за более однородной плотностью, вы можете рассмотреть Van der Corput sequence. Последовательность finds use в симуляциях Монте-Карло и Wolfram Mathworld называет их квази-случайной последовательностью.

1

Создайте два случайных числа в интервале [0,1] и переведите их в прямоугольник как x и y.

+0

Приведите пример ответа о том, что спрашивает SO, иначе сделайте это как комментарий. – InnocentKiller

Смежные вопросы