【问题标题】:Generate N points within a square (uniformly)在一个正方形内生成 N 个点(均匀)
【发布时间】:2013-11-24 08:32:38
【问题描述】:

我想在一个正方形内生成 N 个点(均匀地)。 我怎样才能做到这一点?

【问题讨论】:

  • 它们可以是随机的,也可以是统一的。他们不能两者兼而有之。
  • 您的意思是您希望随机点在多次运行中均匀分布在正方形上?如果它们总是均匀分布在同一次运行中,它们就不是随机的。
  • tnx,我编辑了问题。这是我的错
  • 我讨厌竖琴这种事情,但你有什么尝试?
  • 如果 N 是 2 的幂。我可以将正方形划分为 N 个单元格,并在每个单元格中放置一个点。

标签: java math point uniform


【解决方案1】:

非常酷的问题,比我想象的要困难得多,但这就是我的想法。有关于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 的最大可能值。

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 2011-08-15
    • 2013-05-12
    • 2012-10-15
    • 2018-09-14
    • 2023-04-05
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多