我想在一个正方形内生成N个点(统一)。 我怎么能做到这一点?
答案 0 :(得分:3)
非常酷的问题,比我想象的要困难得多,但这就是想法。有关n-gons的论文,但我会做广场。因此,圆形的均匀分布是一个常见问题,您不能单独采样半径r
和角度theta
,因为对于大半径给予更多权重,即如果我们采取一个小的环状空间,你有更多的区域来自距离中心更远的半径,所以我们从r^2
均匀地采样,因为该区域是r^2
的函数。
现在这个想法对于一个矩形来说是相似的,它的对称性有助于用一定的旋转度(角度)和距离原点的距离(半径)来捕捉,但是注意到当你围绕一个圆旋转时半径会发生很大的变化。向上然后然后向上然后向下。我们需要一种方法来根据角度规定半径,使其在任何给定点的质量均匀。
考虑以下结构(我们可以将方块定位为使其位于其中一侧但这更直观)抱歉,我的图表绘制得很糟糕
A
X
B O C
D
这是我们的方形,A,B,C,D是角,O是原点。我们稍后会解释X.让我们从C点开始并逆时针旋转,角度将表示为Theta。如果我们用角度Theta从O绘制一条直线,X是与正方形边缘的交点。换句话说,X = r(Theta)。我们要做的是将距离r作为θ的函数捕获,以使其成为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的最大可能值。