Matlab:如何控制 streamtube 图的颜色?

Matlab: How can I control the color of a streamtube plot?

我目前正在尝试绘制 3D 流管。我希望管子的颜色对应于它们各自的速度(例如慢 = 蓝色,快 = 红色)。

更准确地说,我有三个包含 x、y 和 z 方向速度的 3D 矩阵。流管的颜色应为 sqrt(vx^2+vy^2+vz^2)。当使用 streamtube(x,y,z,vx,vy,vz,sx,sy,sz) 时,管子根据它们的 z 坐标着色,这是无用的,因为它是一个 3D 图。

嗯,这并不容易(它应该是一个内置选项),但是通过修改每个管子的 CData(它们都是自己的图形对象),您可以获得所需的结果。这是一个例子

load wind
[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);
h=streamtube(x,y,z,u,v,w,sx,sy,sz);
drawnow
view(3)
axis tight
shading interp;

这给出了这张照片:

然后这样做:

vel=sqrt(u.^2+v.^2+w.^2); %// calculate velocities
for i=1:length(h)
    %// Modify the colour data of each tube
    set(h(i),'CData',interp3(x,y,z,vel,get(h(i),'XData')...
        ,get(h(i),'YData'),get(h(i),'ZData'),'spline'))
end
drawnow
view(3)
axis tight
shading interp;

给出这个结果

备注:

1)不知道这个是不是完全正确,不知道怎么测试

2) 您必须将已知点的速度数据插值到流管的顶点上

3) 我发现 spline 插值选项效果最好,但其他选项在其他情况下可能效果更好