由自定义的超立方体包围的点

时间:2009-10-12 10:56:19

标签: algorithm math n-dimensional hypercube

我有一个N维向量,沿每个维度的X和'n'等距点以及参数'delta'。我需要一种方法来查找由超立方体包围的n ^ N个向量的总和,其中向量X位于中心,超立方体的每一侧的大小为2 * delta。

例如:

考虑一个N = 3的情况,所以我们有一个大小为(2 * delta)的立方体,包围了X点。

------------\
|\--------|--\
| |   X   |  |
-----------  |
\ |_2*del___\|

沿着每个维度我都有'n'点。所以,我在X周围总共有n ^ 3个向量。我需要找到所有向量。是否有相同的标准算法/方法?如果你做了类似的事情,请建议。

如果问题不明确,请告诉我。

这就是我所看到的:考虑一个方面,一边的长度是2 * delta,我有n个分区。因此,每个细分的大小(2 * delta / n)。所以我只是移动到(x-delta)的原点(因为x是边的中点)并且通过{(x-delta)+ 1 *(2 * delta / n)获得'n'个点, (x-delta)+ 2 *(2 * delta / n)...... +(x-delta)+ 1 *(n * delta / n)}。我为所有N维做这个,然后对坐标进行排列。这样我就得到了所有的观点。

(我想关闭它)

2 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题,你有一个以X点为中心的轴对齐超立方体,并且你已经将这个超立方体的内部细分为规则格子,其中格子点和间距在超立方体的坐标系中。你所要做的就是让X = 0,找到每个格点的向量,然后返回并用X翻译它们。

编辑:让我添加一个例子

令x =(5,5,5),delta = 1且n = 3

然后,将x移动到原点,你的晶格点是(-1,-1,-1),(0,-1,-1),(1,-1,-1),依此类推总共27.翻译,我们有(4,4,4),(5,4,4),(6,4,4)等。

答案 1 :(得分:0)

好的,我没有完全理解你的问题。关于N维超立方体中的点,总共有2^(N-1)*N个“线”。

如果你只想在看起来像轴的线上创建n个点,但是在与原点相差的距离处进行转换,这里有一些(编写得很差,为清晰起见)MATLAB代码:

n = 10;
delta = 10;
N = 3;
step = (2*delta)/(n-1);
P = zeros(n,N,N);
X = [20 30 25];

for line_dim = 1:N
 for point = 1:n
  for point_dim = 1:N

   if(point_dim ~= line_dim) 
    P(point,point_dim,line_dim) = X(point_dim)-delta;
   else 
    P(point,point_dim,line_dim) = X(point_dim)-delta+step*(point-1);
   end

  end
 end
end

多维数据集的代码,但它适用于任何N.我所做的只是:

  1. 在轴上绘制n个等距点。
  2. 将轴转换为(X-delta)
  3. <强>显示:

    % Display stuff    
    PP = reshape(permute(P,[1 3 2]),[n*N N]);
    plot3(X(1),X(2),X(3),'r*',PP(:,1),PP(:,2),PP(:,3),'.')
    axis([0 Inf 0 Inf 0 Inf]);
    grid on;