距离最小的随机点[Octave]

时间:2016-08-25 21:06:47

标签: matlab octave distribution

我尝试使用n个随机点生成一个多维数据集,其最小距离阈值为1。我使用矩阵来完成它,因此每个列在多维数据集中都是(x,y,z)个点。我有时代码有效,有时它不起作用。我真的无法弄清楚为什么会这样......任何帮助或建议都是值得赞赏的,代码的输入是立方体之一的长度和我想要使用的点数。

更新: 澄清代码:
因此,应该创建一个包含3列和n行的随机矩阵。这表示多维数据集中(x,y,z)个点的n坐标。约束是多维数据集lx的大小以及点d之间的最小距离。因此,我的代码会生成nx3随机矩阵,并检查每个条目以查看其距离是否至少为1,如果它不是为该元素生成新点。然后它返回并检查所有先前的点以保持该限制。由于某些点的距离小于1,因此失败了。我不知道我是否做了足够的检查,或者是否有其他的检查。

输入值:

  • 多维数据集的长度:lx = 7.35
  • 点数:n = 256

代码:

    function [A]=distribution(lx,n)
    format long;
    A=0;
    new=0;
    d=1;
    A=rand(n,3).* [lx];
    A=reshape( A.' ,3,n);
    while(new <= (n+1))
    for i=1:(n-1)
        for j=(i+1):n
            r=A(:,i) - A(:,j);
            rsum= sum(dot(r,r));
            if(rsum < 1.0)
                A(:,j)=rand(1,3).* [lx];
            end
        end
        for k=1:i-1
            r2=A(:,k) - A(:,i);
            r2sum= sum(dot(r2,r2));
            if(r2sum < 1.0)
                A(:,j)=rand(3,1).* [lx];
            end
        end
    end
    new=new +1;
    endwhile
    A=reshape( A.' ,n,[]);

2 个答案:

答案 0 :(得分:0)

积分需要多随机?尽管存在可能的解决方案,但与所有可能的状态相比,它们很少。完全随机点击解决方案可能会无限期地使用。

我可以提出几种方法:

  1. 在网格中设置点,然后将它们随机化。如果你逐点应用坐标的随机化,你可以&#34;撤消&#34;如果它导致一些距离低于1,则会发生变化。
  2. 以&#34;首字母&#34;开头指向允许空间的中心并通过极坐标以及随机角度和半径1来添加点的层数,从初始&#34;点。添加图层后,您可以将半径增加到2并保持&#34; initial&#34;点作为起源。或者,循环遍历最后添加的图层的点,并尝试以类似的方式添加新图层。在任何一种情况下,都必须根据所有先前的点检查距离。
  3. 在这两种方法中,最终结果都不会是随机的。我认为,要获得真正随机的解决方案,你需要在一个带有lx的方框中对256个球进行随机物理模拟,并稍微摇晃它们。

答案 1 :(得分:0)

2D中的这个问题被称为泊松盘分布,并且在3D泊松球分布中。对于这个问题,我们已经知道合理的解决方案,请查看paper

据说在Matlab here中使用代码,如果它不起作用我可能会挖掘我的Python实现