非常酷的问题,比我想象的要困难得多,但这就是我的想法。有关于n-gons的论文,但我只会做正方形。因此,圆的均匀分布是一个常见问题,您不能仅对半径r 和角度theta 进行独立采样,因为更大的半径赋予了更大的权重,即如果我们采用无限小环,你有更多的面积来自远离中心的更大半径,所以我们从r^2均匀采样,因为面积是r^2的函数。
现在这个想法与矩形相似,它的对称性有助于通过某种旋转(角度)和与原点的距离(半径)来捕捉它,但请注意,当你围绕一个圆旋转时,半径会发生巨大变化,去向上然后向下然后向上然后向下。我们需要一种基于角度来规定半径的方法,这样它在任何给定点的质量都是均匀的。
考虑以下结构(我们可以调整正方形的方向,使其位于其一侧,但这更直观)抱歉,我的图表画得很糟糕
A
X
B O C
D
这是我们的正方形,A,B,C,D 是角,O 是原点。我们稍后会解释 X。让我们从点 C 开始逆时针旋转,角度将表示为 Theta。如果我们从 O 以角度 Theta 画一条线,X 就是与正方形边缘的交点。换句话说,X = r(Theta)。我们试图做的是捕获距离 r 作为 theta 的函数,以使其成为 Theta 的均匀概率分布。这就是整个想法..
我们可以用正弦定理写出以下内容
Sin(pi - Theta - pi/4)/c = sin(pi/4)/r(Theta) where C sits at (c,0)
做一些代数并到达
r(Theta) = sqrt(2)*c / (2sin(3pi/4 - Theta)
现在我们需要一个常数 k,这样积分 k*r(Theta) 就会得到 1,这很容易做到。
我明白了
a*sin(pi/4)ln|tan((Theta+pi/4)/2)| evaluated from 0 to pi/4
您已成功构建 p.d.f。 (概率分布函数)为您的 r(Theta),现在计算 c.d.f。 (累积分布函数),将其设置为统一并为您的 Theta 获取封闭形式的表达式。
到目前为止,我们已经构建了随机 Theta,以构建半径 r,意识到很像一个圆,我们在更远的地方有更多的质量,我们可以将它构建为
R = r(Theta)/s 其中 s 是从 0 到 1 的统一值。
我们使用r(Theta),因为它是给定 Theta 的最大可能值。