Jac*_*eal 3 random statistics r probability
我正在尝试为圆内的点生成分布,其中有更多的点朝向中心,但对于甜甜圈形状
我可以生成一个均匀分布的甜甜圈形状 (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)
Run Code Online (Sandbox Code Playgroud)
(2)
r = runif(250)
p = runif(250)
theta = p *2*pi
a = r * cos(theta)
b = r * sin(theta)
plot(a,b)
Run Code Online (Sandbox Code Playgroud)
我最接近的尝试是修改程序 (2),其中 r 限制在 0.5 和 1 之间,但这会删除大多数最接近中心的点,并且其内部周围不会有那么多点。
正如@RobertDodier 所说,尝试使用一些高级的半径分布。我想建议的是Beta 分布。
首先,它自然在[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)
Run Code Online (Sandbox Code Playgroud)
会产生这样的情节
它看起来像甜甜圈吗?
更新
这个中心有明显的孔,形状由 @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)
Run Code Online (Sandbox Code Playgroud)
另一种中心有明显的孔,形状对称,就像真正的甜甜圈
r = hole + (1.0-hole)*rbeta(N, 2.0, 2.0)
Run Code Online (Sandbox Code Playgroud)