Точки, окруженные пользовательским гиперкубом

У меня есть N-мерный вектор, X и 'n' равноудаленные точки вдоль каждого измерения и параметр 'delta'. Мне нужен способ найти общее количество n^N векторов, заключенных в Гиперкуб, определенный с вектором X в центре, и каждая сторона Гиперкуба имеет размер 2* дельта.

Например:

Рассмотрим случай N=3, поэтому у нас есть куб размером (2*delta), заключающий точку X.

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

Вдоль каждого измерения у меня есть "n" точек. Итак, у меня в общей сложности n^3 векторов вокруг X. Мне нужно найти все векторы. Есть ли стандартный алгоритм / метод для того же? Если вы сделали что-то подобное, пожалуйста, предложите.

Если проблема не ясна, дайте мне знать.

Вот на что я смотрел: учитывая одно измерение, длина стороны составляет 2* дельта, и у меня n делений. Таким образом, каждое подразделение имеет размер (2* дельта /n). Поэтому я просто перехожу к началу координат (x-delta) (так как x - средняя точка стороны) и получаю 'n' точек на {(x-delta) + 1*(2*delta/n),(x-delta) + 2*(2*delta/n)....+ (x-delta) + 1*(n*delta/n) } . Я делаю это для всех N-измерений и затем переставляю координаты. Таким образом, у меня есть все пункты.

(Я хотел бы закрыть это)

2 ответа

Если я правильно понимаю вашу проблему, у вас есть выровненный по оси гиперкуб, центрированный вокруг точки 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) и так далее.

Хорошо, я не до конца понял ваш вопрос. Есть всего 2^(N-1)*N "линии" о точке в 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)

Дисплей:

% 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;
Другие вопросы по тегам