Сохранить результаты каждой итерации во вложенном цикле в MATLAB? - PullRequest
0 голосов
/ 05 мая 2019

У меня есть облако точек, состоящее из 37817 трехмерных вершин ( данные здесь ). Для каждой вершины i я вычисляю всех соседей в пределах 15 мм (NeighborVert{i}). Сфера подходит с использованием этих соседей через sphereFit ( исходный код ). Квадратное расстояние каждого идентифицированного соседа до поверхности сферы, обозначенное epsilon{i}(j), рассчитывается для количественного определения остатка каждого соседа в подобранной сфере. Затем я суммирую все значения в пределах epsilon{i} по j и сохраняю результат как E(i), который измеряет общее соответствие сферы соседям вершины i. Вышеописанный процесс реализован с помощью кода MATLAB, приведенного ниже:

T = readtable("<path>\Vertices.xlsx", 'ReadVariableNames',false);
Vertices = table2array(T);
Vertfmt = pointCloud(Vertices);
radius = 15; 

for i = 1:size(Vertices, 1)
    [NeighborIndex{i}] = findNeighborsInRadius(Vertfmt, Vertices(i,:), radius);
    NeighborVert{i} = Vertices(NeighborIndex{i},:);
    [center(i, :), r(i)] = sphereFit(NeighborVert{i});
        for j = 1:length(NeighborIndex{i})
            epsilon{i}(j) = abs((NeighborVert{i}(j, 1) - center(i, 1))^2 + (NeighborVert{i}(j, 2) - center(i, 2))^2 + (NeighborVert{i}(j, 3) - center(i, 3))^2 - r(i)^2);
            E(i) = sum(epsilon{i}(j));
        end
end

epsilon{i} должен содержать несколько значений, поскольку сохраняется квадрат всех соседей вершины i до поверхности подобранной сферы. Тем не менее, мой результат показал, что каждый epsilon{i} содержит только 1 значение. Как я могу сохранить все epsilon{i}(j) с epsilon{i} во время каждой итерации?

Кроме того, мой код для E(i) правильно суммируется по j для всех epsilon{i}(j) с?

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