【发布时间】:2017-01-02 10:39:06
【问题描述】:
我正在尝试生成一个带有n 随机点的立方体,所有点的最小距离阈值为1。我正在使用矩阵来执行此操作,因此每列将是立方体中的(x,y,z) 点。我的代码有时有效,有时无效。我真的不知道为什么会这样......任何帮助或建议都值得赞赏 代码的输入是立方体一侧的长度和我想要使用的点数。
更新:
代码说明:
所以它应该创建一个带有3 列和n 行的随机矩阵。这表示立方体中n 点的(x,y,z) 坐标。约束是立方体的大小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,[]);
【问题讨论】:
-
“有时有效,有时无效”相当模糊。你的代码应该做什么,它到底是怎么做到的?
-
所以应该创建一个3列N行的随机矩阵。这表示立方体中点的 XYZ 坐标。约束是立方体的大小 (lx) 和点之间的最小距离 (d)。所以我的代码生成一个 nx3 随机矩阵并检查每个条目以查看它们的距离是否至少为 1,如果不是,它会为该元素生成一个新点。然后它返回并检查所有先前的点以保持该限制。它失败了,因为有些点的距离小于 1。
-
这是一个随机过程,所以我预计它有时会失败。您将哪些值作为输入传递?请点击edit,为原始问题添加任何更新或说明(包括您之前的评论)。
-
感谢您的回复。尽管这是一个随机过程,但我认为它根本不应该失败,因为在代码中它应该检查所有点。如果点有问题,应该用一个新点替换它并重新检查所有点。我不知道是我没有做足够的检查还是其他原因。
-
我正在尝试了解您的算法。看起来,对于每个点,您都将其与其他每个点进行比较。如果距离低于阈值,则移动该点。然后检查下。如果距离太小,请再次移动它,但在下一个大循环之前,您不会使用新位置检查先前检查的点。外部
while循环似乎等同于0:n+1上的for循环。差不多了吗?
标签: matlab octave distribution