формулы / алгоритм выбора центральных ячеек в сетке? - PullRequest
2 голосов
/ 24 августа 2010

Если у меня есть сетка, скажем, состоящая из 15 х 15 ячеек (но переменной), какие формулы или алгоритм я бы использовал для случайного выбора 20 ячеек, сгруппированных вокруг центральной ячейки?

Полагаю, в идеале мне хотелось бы установить центральную точку, радиус кластера, плотность и т. Д. *

любые указатели были бы очень благодарны! веселит.

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Монте-Карло?

<pseudocode>

found=false
sigma2=3;             // variance
centrex=8; centrey=8; // centre point
while !found
  x=random(15)        //for a 15x15 grid of course!
  y=random(15)
  r2=(x-centrex)^2 + (y-centrey)^2   // squared distance to chosen point
  p=exp(-r2/sigma)                 // probability of accepting this point
  if(p>rand(1)) found=true;        // (calcluated as gaussian distribution)
end

</pseudocode>

Вы можете выбрать свой дистрибутив, используя формулу в строке p=. Здесь распространение можно контролировать с помощью значения sigma. Для плоского распределения просто используйте p=r2<9 для радиуса 3, например.

для гауссиана, радиус и плотность по сути одно и то же, так как интеграл от p по x и y должен сложить до 1.

1 голос
/ 24 августа 2010

Случайность внутри круга - известная парадоксальная проблема (см. Парадокс Бертрана). Так что вам нужно подумать о том, как распределить точки случайным образом. Выбор случайного расстояния в диапазоне от 0 до указанного радиуса и движение в случайном направлении от центра круга (центра сетки), вероятно, не то, что вам нужно, поскольку у вас будет неравномерное распределение по области (более кластеризация в направлении центр). Я хотел бы выяснить ОБЛАСТЬ круга (то есть: ячейки, которые находятся в пределах круга с указанным радиусом), возможно, сохранить их во временном массиве и выбрать n (например, 20) из них случайным образом. Я не уверен, что это было полностью полезно, но основная идея: ДУМАЙТЕ, что вы подразумеваете под случайным.

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