MATLAB: создайте цветную поверхность на основе точек рассеивания

Используя набор данных формата [x,y,z,value], я могу создать трехмерную точечную диаграмму, как показано на изображениях, где цвет каждой точки в местоположении (x,y,z) основан на value. Обратите внимание, что все изображения относятся к одному и тому же сюжету, только с разных точек зрения. Предполагается, что это поверхность октанта сферы.

введите здесь описание изображения введите здесь описание изображения

Есть ли способ интерполяции цветов в 3D, чтобы мы видели сплошную поверхность вместо отдельных точек? Я ищу что-то вроде imagesc, но в 3D. Я пробовал множество функций, включая scatteredInterpolant, patch, mesh и surf, но они не работают в трех измерениях так, как мне бы хотелось.


person Community    schedule 15.03.2016    source источник
comment
Почему surf(x,y,z,c) не работает?   -  person user1543042    schedule 16.03.2016
comment
Я получаю сообщение об ошибке Z должно быть матрицей, а не скаляром или вектором. Я понятия не имею, как преобразовать вектор положения в матрицу.   -  person    schedule 16.03.2016
comment
Можете ли вы опубликовать некоторые примеры данных?   -  person user1543042    schedule 17.03.2016
comment
Я загрузил полный набор данных. Первые три столбца [x,y,z]; остальные столбцы имеют разные значения. Я читаю в каждом столбце по одному, так что формат [x,y,z,value] все еще применяется. Вы должны использовать csvread для импорта данных.   -  person    schedule 17.03.2016


Ответы (1)


На основе данных вашего примера (с несколькими оболочками) я собрал эту программу. Он использует trisurf, поэтому ему не нужны данные сетки.

function PlotColoredSpheres(x,y,z)
    tol = 0.01;

    r = sqrt(x.^2 + y.^2 + z.^2);
    data = num2cell(sortrows([r, x, y, z], [1,2,3,4]),1);
    [R, X, Y, Z] = data{:};

    figure(1)

    RUnique = uniquetol(r, tol);

    for Ru = RUnique(:)'
        j = abs(R - Ru) < tol;
        tri = delaunay(X(j),Y(j));
        trisurf(tri, X(j), Y(j), Z(j));
        lighting phong
        shading interp
        hold on
    end
    hold off
end
person user1543042    schedule 17.03.2016