Как я могу сгенерировать n точек с евклидановым расстоянием меньше, чем d от X

Допустим, у меня есть точка: point <- c(1, 2) Как я могу сгенерировать 10 точек с евклидановым расстоянием от point ниже некоторого выбранного значения, например. 3. Другими словами: как я могу сгенерировать набор точек в окрестности моей точки?


person SathOkh    schedule 30.05.2014    source источник


Ответы (1)


Самый простой способ сделать это — случайным образом выбрать расстояние от 0 до 3, а затем направление от 0 до 360. Сделайте это с желаемой точностью:

r <- 3 * sqrt(runif(10)) ##Since area increases proportionally to distance, as pointed out in comments
theta <- 2 * pi * runif(10)

Чтобы получить координаты:

x <- point[1] + r * cos(theta)
y <- point[2] + r * sin(theta)
person Señor O    schedule 30.05.2014
comment
Чтобы сэмплировать из непрерывного пространства, вы должны сделать: r <- 3 * runif(10) и theta <- 2 * pi * runif(10). - person flodel; 31.05.2014
comment
Для равномерного отбора проб из области необходимо выполнить r <- 3 * sqrt(runif(10)). Постройте результаты с n = 10000 под каждым методом, чтобы увидеть, насколько непреобразованный юниформ r превосходит центральную выборку. - person Gregor Thomas; 31.05.2014
comment
@shujaa Еще один хороший момент - отбирать образец следует не на расстоянии от центра. - person Señor O; 31.05.2014