gpt4 book ai didi

r - 为 "donut"形状生成线性分布

转载 作者:行者123 更新时间:2023-12-05 02:12:18 27 4
gpt4 key购买 nike

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

我可以制作一个均匀分布的 donut 形状 (1),或者一个有更多点朝向中心的圆圈 (2),但不能制作一个有这么多点朝向其内部边界的 donut 形状。

(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 之间,但这会删除大部分最靠近中心的点,并且其内部周围没有那么多。

最佳答案

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

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

它看起来像 donut 吗?

更新

这个是中心有空洞的,@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

另一种中间有透明孔,形状对称,像真正的 donut

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

enter image description here

关于r - 为 "donut"形状生成线性分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56326524/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com