Точки, окруженные пользовательским гиперкубом - PullRequest
0 голосов
/ 12 октября 2009

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

Например:

Рассмотрим случай N = 3, поэтому у нас есть куб размером (2 * дельта), заключающий точку 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 ]

1 голос
/ 12 октября 2009

Если я правильно понимаю вашу проблему, у вас есть выровненный по оси гиперкуб, центрированный вокруг точки X, и вы поделили внутреннюю часть этого гиперкуба на правильную решетку, где точки решетки и промежутки находятся в системе координат гиперкуба. , Все, что вам нужно сделать, это позволить X = 0, найти векторы для каждой из точек решетки, а затем вернуться назад и перевести их на X.

Редактировать: позвольте мне добавить пример

пусть х = (5,5,5), дельта = 1 и n = 3

затем, перемещая x в начало координат, ваши точки решетки (-1, -1, -1), (0, -1, -1), (1, -1, -1) и так далее для всего 27. переводя обратно, мы имеем (4, 4, 4), (5, 4, 4), (6, 4, 4) и т. д.

0 голосов
/ 12 октября 2009

Хорошо, я не до конца понял ваш вопрос. Всего в N-мерном гиперкубе около 1001 * «линий» около точки.

Если вы просто хотите создать 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;
...