0

N次元のベクトル、X、および各次元に沿った「n」個の等距離点と、パラメーター「デルタ」があります。中心にベクトル X が定義され、ハイパーキューブの各辺がサイズ 2*delta であるハイパーキューブに囲まれた n^N ベクトルの合計を見つける方法が必要です。

例えば:

N=3 の場合を考えると、点 X を囲むサイズ (2*delta) の Cube があります。

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

各次元に沿って、「n」点があります。したがって、X の周りに合計 n^3 個のベクトルがあります。すべてのベクトルを見つける必要があります。同じための標準的なアルゴリズム/方法はありますか? 同様のことをしたことがある場合は、提案してください。

問題が明確でない場合は、お知らせください。

これは私が見ていたものです: 1 つの次元を考慮すると、辺の長さは 2*デルタであり、分割数は n です。したがって、各サブディビジョンのサイズは (2*delta/n) です。したがって、(x デルタ) である原点に移動し (x は辺の中点であるため)、{(x デルタ) + 1*(2*デルタ/n) によって 'n' ポイントを取得します。 (x-デルタ) + 2*(2*デルタ/n)....+ (x-デルタ) + 1*(n*デルタ/n) } . すべての N 次元に対してこれを行い、座標の順列を取得します。そうすれば、私はすべてのポイントを持っています。

(これで締め切りたいと思います)

4

2 に答える 2

0

わかりました、私はあなたの質問を完全には理解していませんでした。2^(N-1)*NN 次元の超立方体の 1 点を中心に、全部で「線」があります。

軸のように見えるが、原点から delta の距離で変換された線上に 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 デルタ) だけ変換します

画面:

% 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;
于 2009-10-12T14:37:19.913 に答える