Создание сетки разрозненных декартовых данных для построения на сфере

У меня есть набор из n = 8000 декартовых координат X, Y и Z в качестве векторов, а также вектор V того же размера, который я хочу использовать в качестве значений для создания тепловой карты на сфере.

Я видел эту ссылку (визуализация разбросанных данных по поверхности сферы MATLAB), но я не понимаю, как преобразовать этот набор данных в сетку сетки для построения с помощью прибоя.

Почти в каждом примере, который я видел, используются меш-сетки. Прямо сейчас я рисую сферу, а затем использую scatter3, чтобы нарисовать свои точки в виде больших шаров и попытаться сгладить их позже. Я выгляжу так: введите здесь описание изображения

Я хотел бы получить рисунок как рисунок примера в той ссылке, где он использует:

k = 5;
n = 2^k-1;
[x,y,z] = sphere(n);
c = hadamard(2^k);
surf(x,y,z,c);
colormap([1  1  0; 0  1  1])
axis equal

РЕДАКТИРОВАТЬ:

(Извините, что так долго не отвечал, корона-кризис не позволял работать) На самом деле я делаю следующее:

for i=1:numel(pop0n)
ori(i,:)=ori(i,:)/norm(ori(i,:));
end

x = ori(:,1); 
y = ori(:,2); 
z = ori(:,3); 

%// plot
m=100;
[aa,bb,cc] = sphere(m);
surf(aa,bb,cc,ones(m+1,m+1)*min(pop0n))
hold on
colormap jet;
scatter3(x,y,z,400,pop0n/norm(pop0n),'filled');
colorbar
shading interp

Массив ori имеет размер 8000x3 и содержит координаты x, y и z точек, которые я хочу построить, а pop0n представляет собой вектор размером 8000 с интенсивностью каждой координаты.

Мой главный вопрос: как мне преобразовать мои x, y, z и pop0n, которые являются векторами, в 2D-массивы (сетку) для использования серфинга? Потому что я не могу просто выполнить команду surf(x,y,z,pop0n), если они являются векторами.

заранее спасибо


person Cayo Emilio    schedule 27.04.2020    source источник
comment
Непонятно, чем ваш вопрос отличается от того, который вы связали. Вы пробовали griddata?   -  person David    schedule 28.04.2020
comment
и мы должны предположить, что x, y, z у вас есть точки на сфере?   -  person bla    schedule 28.04.2020
comment
Не используйте scatter3. Используйте surf и отправьте свой вектор V в качестве четвертого параметра (как в приведенном вами примере).   -  person Hoki    schedule 28.04.2020
comment
Хоки: Это то, что я хочу сделать, но не знаю как... Дэвид: Разница в форме переменных и в том, как преобразовать одну в другую. Я не знаком с griddata. Я проверю. Спасибо   -  person Cayo Emilio    schedule 03.06.2020
comment
И да, x, y, z — точки на сфере.   -  person Cayo Emilio    schedule 03.06.2020


Ответы (1)


Как предложил Дэвид, griddata делает свою работу.

Я сделал следующее:

for i=1:numel(pop0n)
ori(i,:)=ori(i,:)/norm(ori(i,:));
end

x = ori(:,1); 
y = ori(:,2); 
z = ori(:,3); 

%// plot
m=100;
[aa,bb,cc] = sphere(m);
v = griddata(x,y,z,pop0n,aa,bb,cc,'nearest');
surf(aa,bb,cc,v)
colormap jet;
colorbar
shading interp
person Cayo Emilio    schedule 03.06.2020