我有一个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维做这个,然后对坐标进行排列。这样我就得到了所有的观点。
(我想关闭它)
答案 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.我所做的只是:
<强>显示:强>
% 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;