我将在 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)
如何根据这些条件有效地生成积分?