均匀分布在单位圆盘(2D)上的点

Points uniformly distributed on unit disk (2D)

我正在尝试从单位圆盘上的均匀分布生成 10,000 个点并绘制这些点。

我使用的方法分为三个步骤。第一步是生成点 x 的大小。此点有 cdf F(x) = x^2 min(x) = 0 和 max(x) = 1。第二步涉及从多元正态分布生成二维向量(我将其称为 y),其中 mu 为零向量和 sigma 是 2x2 单位矩阵 - MVN(0,I)。最后我将向量 y 归一化为长度 x。我曾尝试用 R 编写解决方案,但我认为我的答案不正确。如果能指出正确的方向,我将不胜感激。

u = runif(10000)
x = u^2
y = mvrnorm(10000, mu=rep(0,2), Sigma=diag(2))
y_norm = (x*y)/sqrt(sum(y^2))
plot(y_norm, asp = 1)

我为 mvrnorm 使用了 MASS 包。我还包括了我最终得到的情节:

您需要计算 y 矩阵中每一行的长度,您得到的是 y 中所有数字之和的平方根,这只是按常数缩放多项式.此外,您需要 xsqrt(u) 而不是 u^2 - 此代码通过其长度和用户 sqrt(u) 缩放对每一行进行标准化,它看起来漂亮且统一:

plot(sqrt(u)*y/sqrt(y[,1]^2+y[,2]^2))

有更好的方法可以在圆盘上制作统​​一的点,除非这只是一个练习...