在矩形内均匀生成随机点?

5
我正在尝试在矩形内部生成一定数量的随机均匀点(我知道每个角落的坐标对)。让我们的矩形是ABCD。我的想法是:通过AC对角线将矩形分成两个三角形。找到对角线的斜率和截距。然后,从[0,1]区间中生成两个随机数a、b。计算x = a*AB和y = b*AD(AB、AD是距离)。如果A不是(0,0),那么可以加上A的坐标到x和y中。现在我们有一个点(x,y)。如果它不在下三角(ABC)中,则跳过到下一步。否则,将该点添加到我们的图形中,并将(x,y)相对于AC对角线的对称点也添加进去,以便我们也能填充上三角形(ADC)。我已经实现了这一点,但我非常怀疑这些点的均匀性(从图中判断)。我应该如何修改算法?我猜问题与如何选择三角形和对称相关。

你能详细解释一下“随机均匀”是什么意思吗?这些概念并不相容,我可以想象出几种定义“均匀随机”的方式。此外,将你的算法的散文解释重新格式化为伪代码会有助于澄清你正在做什么。 - MobA11y
你对你的图表有什么具体问题?我还不清楚你如何定义均匀...在统计/概率中,均匀通常只是指某件事发生的可能性,而不是所选值的分布结果。例如,非均匀分布可能会在左上角的点上具有更高的概率,但你仍然可以得到看起来像你所拥有的结果,只是它们会更少“可能”,因为那个角落里没有高密度的点。 - MobA11y
话虽如此,你的算法包含“对称”、“如果”和“基于沿AC对角线反射将同一点放置在两个位置的想法”,这让我相信你试图操纵你的点以更均匀地填充空间,这不是随机的。那么,你能否明确说明你认为结果存在什么问题呢? - MobA11y
1
让MATLAB确定您的伪随机分布的“均匀性”。如果有什么,分布的均匀性会减弱“随机”部分。不要尝试操纵您的值。取一堆随机点并将它们绘制出来。分组、空白等都是伪随机表格的畸变,如果有什么,它们证明了高质量的伪随机分布。即使在均匀分布中,如果我们随机选择,我们也会预期看到分组、空洞,甚至偶尔连续出现相同的点。 - MobA11y
1
你怎么知道我学了多少统计课程,你是NSA的吗?我不是在质疑我对均匀分布的理解,而是在质疑OP的理解,因为他表达的方式不像一个熟悉统计学的人,让人觉得他误解了作业任务。也就是说:均匀分布与在矩形中均匀生成随机点之间的区别?他的期望听起来像是在网格中设置一组点。如果你真的读了所有的评论,这一点就会变得清楚。如果你有什么有建设性的东西要补充,那么9个月后(在此加入数学笑话)可以去做。 - MobA11y
显示剩余4条评论
6个回答

14
为什么不只是生成x=random([A.x, B.x])和y=random([B.y, C.y]),然后将它们组合成(x,y)呢?一个n维均匀分布就是由各个分量的均匀分布乘积得到的。

6
这被称为点选取和其他类似的术语。你似乎在正确的轨道上,因为这些点应该来自均匀分布。对我来说,你的图看起来相当随机。

你在使用上下三角形做什么?它们似乎是不必要的,而且肯定会使事情变得更加不随机。这是否是一些类似于反向变量的方差缩减方法?如果@Paddy3118是正确的,你只需要随机点来填充空间,那么你应该研究低失真序列Halton序列van der Corput序列推广到多个维度。如果你有Matlab的统计工具箱,请查看sobolsethaltonset函数或qrandstreamqrand


3
这个方法(来自于@Xipan Xiao和 @bonanova)可以用多种语言实现。以下是MATLAB代码。
a = 0; b = 1;
n = 2000;
X = a + (b-a)*rand(n,1);
Y = a + (b-a)*rand(n,1);

较新版本的MATLAB可以使用makedistrandom命令。

pdX = makedist('Uniform',a,b);
pdY = makedist('Uniform',a,b);
X = random(pdX,n,1);
Y = random(pdY,n,1);

(X,Y) 将均匀分布在以角点为 (a,a), (a,b), (b,a), (b,b) 的矩形中。

为了验证,我们可以观察 XY 的边缘分布,并看到它们也是均匀分布的。

scatterhist(X,Y,'Marker','.','Direction','out')  

带边际分布的散点图

更新: 使用haltonset(由@horchler建议)

p = haltonset(2);
XY = net(p,2000);
scatterhist(XY(:,1),XY(:,2),'Marker','.','Direction','out')  

Halton Set Scatterplot with histograms


1

0

这只是我的想法,我还没有用代码测试过。

1.根据可变密度将矩形分成 N x M 个单元格的网格。

2.遍历单元格并在其中随机选择一个点,直到达到目标点数量。


-1

在区间[0,1]中生成两个随机数,将它们转换并缩放为你的矩形的x和y坐标。


4
请问您需要的翻译是:请在回答中举例说明 SO 是在询问什么,否则将其作为评论。 - InnocentKiller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接