Точки, окруженные пользовательским гиперкубом
У меня есть 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. Все, что я сделал, это:
- Нарисуйте эти n равноудаленных точек на осях.
- Перевести оси по (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;