Вопрос по algorithm, matlab, math – Эквидистантные точки через куб

4

Мне нужно инициализировать некоторые трехмерные точки, и я хочу, чтобы они были равномерно распределены по всему кубу. Есть ли творческие способы сделать это?

Я использую итеративный алгоритм максимизации ожиданий, и я хочу, чтобы мои начальные векторы «охватывали»; пространство равномерно.

Например, предположим, у меня есть восемь точек, которые я хочу разместить одинаково в кубе размером 1x1x1. Я хотел бы, чтобы точки в углах куба с длиной стороны 0,333 центрировались внутри большего куба.

Пример 2D ниже. Обратите внимание, что красные точки равноудалены от друг друга и краев. Я хочу то же самое для 3D.

Equidistant points

В тех случаях, когда количество точек не имеет целочисленного корня куба, я вполне могу оставить некоторые «пробелы». в расположении.

В настоящее время я беру корень куба из числа точек и использую его для вычисления количества точек и желаемого расстояния между ними. Затем я перебираю точки и увеличиваю координаты X, Y и Z (в шахматном порядке, так что Y не увеличивается до тех пор, пока X не вернется к 0, то же самое для Z с учетом Y).

Если в MATLAB есть простой способ сделать это, я с радостью воспользуюсь им.

"равноудаленный от друг друга и от сторон вмещающего куба"? Я не уверен что там обязательноis всегда решение, которое удовлетворяет этим условиям. RBarryYoung
Вы не определили проблему полностью, например, в трехмерном кубе будет много возможных компоновок с двумя точками. quant_dev
3d часто трудно объяснить в тексте. Можете ли вы дать нам эскиз? ralphtheninja
Почему ваши 8 очков должны быть в 1/3 куба? Почему не 1/2 куб или 9/10-й куб? RBarryYoung
Error: User Rate Limit Exceeded M. Dudley

Ваш Ответ

5   ответов
5

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

1

Error: User Rate Limit ExceededError: User Rate Limit Exceeded.

3

l=linspace(0,1,n+2);
x=l(2:n+1); y=x; z=x;
[X, Y, Z] = meshgrid(x, y, z);

Затем для каждой позиции в матрицах координаты этой точки задаются соответствующими элементами X, Y и Z. Если вы хотите, чтобы точки были перечислены в одной матрице, чтобы каждая строка представляла точку с тремя столбцами для координат x, y и z вы можете сказать:

points(:,1) = reshape(X, [], 1);
points(:,2) = reshape(Y, [], 1);
points(:,3) = reshape(Z, [], 1);

Теперь у вас есть списокn^3randi([0 n^3], a, 1)a индексы точек для удаления. (Не забудьте проверить наличие дубликатов в матрице, возвращеннойrandi()

0

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded M. Dudley
-1

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded M. Dudley<,/a> Jul 6 '09 at 22:42

Похожие вопросы