我正在尝试为圆内的点分配分布,其中点朝向中心更多,但为甜甜圈形状
我可以产生一个均匀分布的甜甜圈形状(1),或者是一个指向中心的点更多的圆(2),但是没有一个甜甜圈形状指向其内部边界的点太多。
(1)
TTempTable&& MyFunction() {
TTempTable tmp = f(...);
...
return std::move(tmp);
}
(2)
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限制在0.5和1之间,但这会删除大部分最靠近中心的点,并且内部不存在太多点。
答案 0 :(得分: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)