2013-05-17 159 views
3

我想在一个矩形内生成一定数量的随机均匀点(我知道每个角的坐标对)。在矩形内(均匀地)生成随机点?

让我们的矩形是 ABCD

我的想法是: 由AC对角线划分矩形成两个三角形。找到对角线的斜率和截距。 然后,从[0,1]区间生成两个随机数,让它们为a,b。评估x = a AB和y = b AD(AB,AD,距离)。如果A不是(0,0),那么我们可以添加到x和y A的坐标。 现在我们有一个点(x,y)。如果它不在下面的三角形(ABC)中,跳到下一步。 否则,将该点加入我们的图中,并且还添加(x,y)与AC对角线的对称,以便我们也可以填充上三角形(ADC)。

我已经实现了这一点,但我高度怀疑这些点是统一生成的(从图中判断)。我应该如何修改我的算法?我想这个问题与我如何选择三角形和对称的东西有关。

Picture

+0

你可以扩展你的意思是“随机制服”。这些都不是免费的想法,我可以设想一些方法来定义“一致随机”。此外,将你的散文解释为伪代码的格式将有助于澄清你在做什么。 – ChrisCM

+0

“随机均匀”我的意思是我应该生成必须均匀分布在矩形区域的随机数。 –

+0

你的情节有什么问题,具体是?我仍然不清楚你如何定义制服......统一的统计/概率通常简单地指发生事件的可能性,而不是选定值的结果分布。例如,非均匀分布的左上角的点的概率会更高,但您仍然可以得到看起来像您的结果,但它们会更“不可能”,因为没有高密度的角落点。 – ChrisCM

回答

5

这被称为point picking和其他类似的术语。你似乎在正确的轨道上,点应该来自统一的分布。你的情节对我来说看起来相当随机。

你在做什么上下三角形?他们似乎没有必要,而且肯定会让事情变得随机。这是否符合antithetic variates的一些表格差异?如果@ Paddy3118是正确的,你真的只需要随机点,以填补空间,那么你应该看看low-discrepancy sequencesHalton sequencevan der Corput sequence概括为多个维度。如果您有Matlab的统计工具箱,请查看sobolsethaltonset函数或qrandstreamqrand

11

为什么不只是产生X =随机([A.x,B.x])和y =随机([B.y,C.y]),并把它们一起作为(X,Y)? n维均匀分布仅仅是分量的n个均匀分布的乘积。

1

在区间[0,1] translate中生成两个随机数,并将它们作为x和y缩放到您的矩形。

+0

给出一些关于SO所要求的答案的例子,否则以此作为评论。 – InnocentKiller