小编Sah*_*H.Z的帖子

如何生成每个点之间距离最小的 3 维随机点?

我将在 matlab 中用这个特定字符生成 10^6 个随机点。这些点应该位于半径为 25 的球体内部,它们是 3-D 的,因此我们有 x、y、z 或 r、theta、phi。每个点之间有一个最小距离。首先,我决定生成点,然后检查距离,然后省略不具备这些条件的点。但是,它可能会遗漏很多要点。另一种方法是使用RSA(随机顺序加法),这意味着以点之间的最小距离逐个生成点。例如生成第一个点,然后在距点 1 的最小距离中随机生成第二个点。一直持续到获得 10^6 个点。但这需要很多时间,而且我无法达到 10^6 个点,因为搜索新点的适当位置的速度将需要很长时间。

现在我正在使用这个程序:

Nmax=10000; 
R=25; 
P=rand(1,3); 
k=1; 
while k<Nmax 
theta=2*pi*rand(1); 
phi=pi*rand(1); 
r = R*sqrt(rand(1)); 
% convert to cartesian 
x=r.*sin(theta).*cos(phi); 
y=r.*sin(theta).*sin(phi); 
z=r.*cos(theta); 
P1=[x y z]; 
r=sqrt((x-0)^2+(y-0)^2+(z-0)^2); 
D = pdist2(P1,P,'euclidean'); 
% euclidean distance 

    if D>0.146*r^(2/3) 
        P=[P;P1]; 
        k=k+1;
    end 
    i=i+1; 
end 
x=P(:,1);y=P(:,2);z=P(:,3); plot3(x,y,z,'.');
Run Code Online (Sandbox Code Playgroud)

如何根据这些条件有效地生成积分?

matlab geometry distance minimum

5
推荐指数
1
解决办法
3606
查看次数

标签 统计

distance ×1

geometry ×1

matlab ×1

minimum ×1