关于Matlab:创建散布的笛卡尔数据的网格以在球上绘图

Creating meshgrid of scattered Cartesian data for plotting on a sphere

我有一组n = 8000个笛卡尔坐标X,Y和Z作为向量,还有一个大小相同的向量V,我想将其用作在球上创建热图的值。

我看到了这个链接(通过球面MATLAB可视化分散数据),但是我不明白如何将这组数据转换为网格,以便使用surf进行绘图。

我看到的几乎每个示例都使用网状网格。
现在,我正在通过绘制一个球体,然后使用scatter3将我的点绘制为大球,然后尝试使其平滑。我看起来像这样:
enter

1
2
3
4
5
6
7
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

编辑:

(很抱歉花了这么长时间回复,日冕危机使人们无法工作)
我实际上在做的是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)。

预先感谢


按照David的建议,griddata可以完成这项工作。

我所做的是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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