массив векторных позиций Matlab - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать симулятор ткани и мне нужен способ хранения положений частиц.Я хотел бы сохранить их как [x, y, z].Мне нужен массив для всех положений частиц.Это будет означать наличие массива [[x1, y1, z1], [x2, y2, z2], ... и т. Д.].

Моя ширина и высота равны 3, поэтому их должно быть 9 [x, y, z] в сетке.Однако мой вывод показывает сотни позиций.Я действительно не знаю, что я делаю не так.Извините, если этот вопрос можно было отформатировать лучше.

for i = 1:particleWidth
    for j = 1:particleHeight
        X = (width*(i/particleWidth));
        Y = (height*(j/particleHeight));
        xPos = [xPos,X];
        yPos = [yPos,Y];
    end
end

[T1,T2,T3] = ndgrid(xPos,yPos,Z);
grid = [T1(:),T2(:),T3(:)];
disp(grid);

1 Ответ

0 голосов
/ 05 декабря 2018

ndgrid реплицирует входные данные для создания сетки.

[X,Y]=ndgrid(1:3,4:6)

X =

     1     1     1
     2     2     2
     3     3     3


Y =

     4     5     6
     4     5     6
     4     5     6

Если вы хотите использовать эту функцию, вы должны инициализировать xPos и yPos как векторы:

xPos = (width/particleWidth).*(1:particleWidth);
yPos = (height/particleHeight).*(1:particleHeight);
[T1,T2] = ndgrid(xPos,yPos); %T1 and T2 will be width-by-height arrays
grid = [T1(:),T2(:),zeros(numel(T1),1)]; % Or whatever Z should be

По сути, вы уже создали xPos и yPos как массивы с ширина x высота записей, так что вы получите по крайней мере квадрат этого числа из ndgrid.Если бы Z также содержало 9 элементов, из этого получилось бы 9 ^ 3 = 729 строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...