我需要初始化一些三维点,我想他们是整个立方体等距。 是否有任何创造性的方式来做到这一点?
我使用迭代期望最大化算法,我想我的初始向量,以“跨越”的空间均匀。
例如,假设我有,我想空间立方体尺寸1x1x1同样8分。 我想在与0.333的边长的立方体的角部,较大立方体内的中心的点。
二维的例子是下面。 请注意,红点是从海誓山盟与边缘的距离相等。 我想对于3D相同。
在点数没有一个整数立方根的情况下,我很好的安排留下一些“差距”。
目前,我正在点数的立方根,并使用该计算点的数量和它们之间的理想距离。 然后,我通过迭代点和(与Y的方面错开,以便Y不递增,直到X返回到0,同为Z)递增X,Y,Z坐标。
如果有一个简单的方法在MATLAB做到这一点,我会很乐意使用它。
你将有更多的细节来定义问题的情况下,点的数量是不是一个完美的立方体。 Hovever,对于情况下,点的数量是一个立方体,你可以使用:
l=linspace(0,1,n+2);
x=l(2:n+1); y=x; z=x;
[X, Y, Z] = meshgrid(x, y, z);
然后在各矩阵位置,该点的坐标由X,Y,和Z的相应的元件给出。如果您希望在一个单一的矩阵列出的点,使得每行代表一个点,与该三列对于x,y和z坐标,那么你可以说:
points(:,1) = reshape(X, [], 1);
points(:,2) = reshape(Y, [], 1);
points(:,3) = reshape(Z, [], 1);
现在,您有一个列表n^3
在整个单位立方体网格点,不包括边界。 正如其他人所建议的,你也许可以随机,如果你想少点,删除一些点。 这将是容易做到的,通过使用randi([0 n^3], a, 1)
以生成a
点以除去的索引。 (不要忘记您在返回的矩阵重复randi()
否则你可能不会删除足够的积分。)
你所建议的抽样策略被称为一个苏哈列夫网格,这是最佳的低色散抽样策略, http://planning.cs.uiuc.edu/node204.html 。 在的情况下的样本的数目不是n ^ 3,其中指向从电网省略选择是从取样的观点来看不重要。
在实践中,有可能使用低偏差(准随机)采样技术在三维空间中达到非常好的效果, http://planning.cs.uiuc.edu/node210.html 。 你可能想看看使用哈尔顿和哈默斯利序列。
- http://en.wikipedia.org/wiki/Halton_sequence
- http://en.wikipedia.org/wiki/Constructions_of_low-discrepancy_sequences
选择点随机立方体内,然后计算矢量到最近邻居或墙壁上。 然后,通过指数衰减步长延伸最小的矢量的端点。 如果你这样做迭代,该点应收敛到最优解。 这甚至工作,如果点的数量不立方米。
一个良好的随机生成可能是第一个可用的第一近似。 可能与后面的过滤器来重新定位(再次随机)最严重的罪犯。