Создание линейного распределения для формы «пончик» - PullRequest
2 голосов
/ 27 мая 2019

Я пытаюсь получить распределение для точек в пределах круга, где есть больше к центру, но для формы пончика

Я могу создать равномерно распределенную форму пончика (1) или круг, где есть больше точек к центру (2), но не форму пончика, у которого так много точек к его внутренней границе.

(1)

r = sqrt(runif(250, min = 0.25, max =1))
p = runif(250)
theta = p *2*pi
a = r * cos(theta) #coordinates for circle
b = r * sin(theta)
plot(a,b)

(2)

r = runif(250)
p = runif(250)
theta = p *2*pi
a = r * cos(theta)
b = r * sin(theta)
plot(a,b)

Моя самая близкая попытка - изменить программу (2), где r ограничен от 0,5 до 1, но это удаляет большинство точек, ближайших к центру, и не имеет столько точек вокруг его внутренней части.

1 Ответ

2 голосов
/ 30 мая 2019

Как сказал @RobertDodier, попробуйте использовать некоторое расширенное распределение для радиуса.Я хотел бы предложить следующее: Бета-дистрибутив .

Во-первых, он естественным образом находится в диапазоне [0 ... 1], нет необходимости усекать, принимать / отклонять и т. Д. Во-вторых,у него есть два параметра (a, b), которые можно использовать для получения одного пика, ноль в 0 и наклон до 1. Посмотрите на графики на вики-странице.И, наконец, оно реализовано в R .a меньше b означает, что пик равен 0,5, a больше b означает, что пик находится справа на 0,5.

Вдоль линий

N = 10000
r = rbeta(N, 7.0, 5.0)
theta = 2.0*pi*runif(N)
a = r * cos(theta)
b = r * sin(theta)
plot(a,b)

создаст такой сюжет

enter image description here

Похоже ли это на пончик?

ОБНОВЛЕНИЕ

Это одно с прозрачным отверстием в центре и формой, предложенной @ RobertDodier

N = 10000
hole = 0.25
r = hole + (1.0-hole)*rbeta(N, 1.0, 3.0)
theta = 2.0*pi*runif(N)
a = r * cos(theta)
b = r * sin(theta)
plot(a,b)

enter image description here

Еще одно с прозрачным отверстием в центре и симметричной формойкак настоящий пончик

r = hole + (1.0-hole)*rbeta(N, 2.0, 2.0)

enter image description here

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