【问题标题】:Producing a linear distribution for a "donut" shape为“甜甜圈”形状生成线性分布
【发布时间】:2019-10-13 01:21:20
【问题描述】:

我正在尝试为圆内的点生成一个分布,其中更多朝向中心,但对于甜甜圈形状

我可以生成一个均匀分布的甜甜圈形状 (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 之间,但这会删除最靠近中心的大部分点,并且在其内部没有那么多点。

【问题讨论】:

  • 不,一点也不。
  • 尝试独立生成 r 和 theta,然后让您的点为 (r, theta),theta 在 [0, 2 pi) 上具有均匀分布,而 r 在 [ 中具有支持的分布0.5, 1],接近 0.5 的密度更大。有很多这样的分布,一种是移位,截断指数。尝试首先从指数生成,然后从移位指数生成,最后是截断的移位指数。祝你好运,玩得开心,似乎是一个好问题。 PS。为了好玩,请查看有关“伯特兰问题”的 Wikipedia 文章。

标签: r random statistics probability


【解决方案1】:

正如@RobertDodier 所说,尝试对半径使用一些高级分布。我想建议的是Beta distribution

首先,它自然在[0...1]范围内,不需要截断,接受/拒绝等。 其次,它有两个参数 (a,b),可用于获得单峰,0 处为零,斜率为 1。查看 wiki 页面中的图表。最后,它在 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)

会产生这样的情节

看起来像甜甜圈吗?

更新

这个是@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)

另一个中心有一个清晰的洞和对称的形状,像一个真正的甜甜圈

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

【讨论】:

  • 感谢您提供示例。 OP 写“更靠近中心”,这有点模棱两可,但可能类似于 r = 1 + rbeta(N, 1.0, 3.0) ?我想在这一点上我们需要 OP 来引导我们朝着正确的方向前进。
  • @RobertDodier 感谢您提醒 OP 想要在中心有一些清晰的孔(0.25?0.5?),我已经用几个例子更新了答案,包括你提出的形状。让我们等待 OP 提供反馈。
猜你喜欢
  • 2013-04-11
  • 2012-01-18
  • 2014-12-07
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多