В большинстве случаев вы можете сделать это в векторном формате с помощью ndgrid
.
[M, N] = ndgrid(0:5:359, 1:5:360);
X = cosd(M)+cosd(M+N);
Y = sind(M)+sind(M+N);
Z = cosd(M)+sind(M+N);
allZero = (X==0)&(Y==0)&(Z==0); % This ...
X(allZero) = []; % does not ...
Y(allZero) = []; % do ...
Z(allZero) = []; % anything.
plot3(X,Y,Z,'b.');
Небольшое пояснение: Вызов [M, N] = ndgrid(0:5:359, 1:5:360);
генерирует все комбинации, где M
является элементом 0:5:359
и N
является элементом 1:5:360
. Это будет в виде двух матриц M
и N
. Если вы хотите, вы можете переставить эти матрицы в векторы, используя M = M(:); N = N(:);
, но здесь это не нужно. Если у вас была еще одна переменная, вы бы использовали: [M, N, P] = ndgrid(0:5:359, 1:5:360, 10:5:1000)
.
К слову: Код, в котором вы удаляете запись [0,0,0]
, здесь ничего не делает, потому что это значение не отображается. Я вижу, вам нужно только это, потому что вы выделяете намного больше памяти, чем вам действительно нужно. Вот две версии исходного кода, которые не так хороши, как вариант ndgrid
, но предпочтительнее оригинального одного:
m = 0:5:359;
n = 1:5:360;
K = zeros(length(m)*length(n), 3);
for i = 1:length(m)
for j = 1:length(n)
nextRow = (i-1)*length(n) + j;
K(nextRow, 1) = cosd(m(i)) + cosd(m(i)+n(j));
K(nextRow, 2) = sind(m(i)) + sind(m(i)+n(j));
K(nextRow, 3) = cosd(m(i)) + sind(m(i)+n(j));
end
end
Или проще, но немного медленнее:
K = [];
for m = 0:5:359
for n = 1:5:360
K(end+1,1:3) = 0;
K(end, 1) = cosd(m)+cosd(m+n);
K(end, 2) = sind(m)+sind(m+n);
K(end, 3) = cosd(m)+sind(m+n);
end
end