Как сгенерировать равномерно распределенные точки в шаре 3-го блока?


11

Я разместил предыдущий вопрос , это связано, но я думаю, что лучше начать другую тему. На этот раз мне интересно, как создать равномерно распределенные точки внутри сферы 3-х единиц и как проверить распределение визуально и статистически? Я не вижу размещенных там стратегий, которые можно напрямую перенести на эту ситуацию.


4
Методы предыдущего вопроса применяются непосредственно, как только вы заметите, что количество точек на расстоянии от начала координат должно быть пропорционально . Таким образом, если вы генерируете независимую равномерную переменную в вместе с точкой на поверхности сферы, то масштабирование помощью делает свое дело. rr3u[0,1]wwu1/3
whuber

@whuber: может быть, я просто не понял суть предыдущих методов. Позвольте мне попробовать то, что вы описали. Кроме того, каковы способы проверки однородности здесь снова?
Цян Ли

2
K-функция @Qiang Ripley и критерий хи-квадрат. Вы также можете проверить равномерность радиальной проекции точек на поверхности сферы, однородность куба по длинам точек и независимость этих двух.
whuber

Для меня не так очевидно, что означает «равномерно распределенный» ... И, вероятно, попытка определить его автоматически создаст генерирующий алгоритм (=

@mbq, я думаю, чтобы определить термин, нам нужно иметь pdf-файл . fR,Θ,Φ(r,θ,ϕ)=r2
Цян Ли

Ответы:


14

Самый простой способ - равномерно выбрать точки в соответствующем гиперкубе и отбросить те, которые не лежат в сфере. В 3D это не должно случаться так часто, примерно в 50% случаев. (Объем гиперкуба равен 1, объем сферы равен )43πr3=0.523...


+1. Это одна из методик, рекомендованных в разделе часто задаваемых вопросов comp.graphics.algorithms "Однородные случайные точки на сфере".
Дэвид Кэри

1
Что если мы хотим сделать это для ? n>100
Аресы

2
Это называется «метод отказа». Работая хорошо в трех измерениях, в двадцати семи измерениях, только одна из триллиона точек лежит в 27 шарах, а не в остальной части 27 кубов, поэтому метод отбрасывания плохо обобщается. Я упоминаю об этом, потому что в настоящее время мне нужны образцы равномерно в шаре 2440 размеров.
Reb.Cabin

13

Вы также можете сделать это в сферических координатах, в этом случае нет отклонения. Сначала вы случайным образом генерируете радиус и два угла, а затем используете формулу перехода для восстановления , и ( , , ).xyzx=rsinθcosϕy=rsinθsinϕz=rcosθ

Вы генерируете равномерно между и . Радиус и угол наклона не одинаковы. Вероятность того, что точка находится внутри шара радиуса равна поэтому функция плотности вероятности равна . Вы можете легко проверить, что кубический корень равномерной переменной имеет точно такое же распределение, поэтому вы можете сгенерировать . Вероятность того, что точка находится в сферическом конусе, определенном наклоном равна или еслиϕ02πrθrr3r3r2rθ(1cosθ)/21(1cos(θ))/2θ>π/2 . Таким образом, плотность есть . Вы можете проверить, что минус арккосин равномерной переменной имеет правильную плотность.θsin(θ)/2

Или, проще говоря, мы можем смоделировать косинус равномерно beteen и .θ11

В R это будет выглядеть так, как показано ниже.

n <- 10000 # For example n = 10,000.
phi <- runif(n, max=2*pi)
r <- runif(n)^(1/3)
cos_theta <- runif(n, min=-1, max=1)
x <- r * sqrt(1-cos_theta^2) * cos(phi)
y <- r * sqrt(1-cos_theta^2) * sin(phi)
z <- r * cos_theta

В процессе написания и редактирования этого ответа я понял, что решение менее тривиально, чем я думал.

Я думаю, что самый простой и эффективный в вычислительном отношении метод - это следовать методу @ whuber для генерации на единичной сфере, как показано в этом посте, и масштабировать их с помощью .(x,y,z)r

xyz <- matrix(rnorm(3*n), ncol=3)
lambda <- runif(n)^(1/3) / sqrt(rowSums(xyz^2))
xyz <- xyz*lambda

3
Это гораздо лучший ответ из-за отсутствия отказа. В пространствах с большим размером выборка отбраковки может быть очень дорогой из-за низкой вероятности принятия.
kingledion

2
Например, последний бит кода может быть адаптирован к более высокой размерности d. Для этого замените все экземпляры 3на d.
gui11aume

0

PP=N/||N||U1/nNU[0,1]1/nn

И вуаля!


2
Равномерно распределенный радиус не даст равномерной точки в шаре ...
kjetil b halvorsen

1
U
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.