MATLAB 中的 3D 海洋温度插值
3D Oceanic Temperature Interpolations in MATLAB
我正在执行 运行 自主水下航行器任务,该任务为我提供纬度、经度、深度和温度数据,我正在尝试使用这些数据创建 3D 插值。我能够创建环境的 3D 模型,但我试图让颜色填充成为每个相关位置的插值温度。
下图是我得到的 3d 深度图,我希望填充颜色是这些位置的温度:
我尝试使用颜色图,其中 surf(X, Y, Z, C) 和 C 是温度数据,但这不起作用。
这是我的代码,其中 VPSA 是我的数据集,X = 经度,y = 纬度,Z = 深度,C = 温度
%Making Variables:
X = VPSA {:,1};
Y = VPSA {:,2};
Z = VPSA {:,3};
C = VPSA {:,4};
%Three axis plot
%Plotting Variable with coordinates
xi = linspace(min(X),max(X),1000);
yi = linspace(min(Y),max(Y),1000);
[Xi,Yi] = meshgrid(xi,yi);
Zi = griddata(X,Y,Z, Xi,Yi);
mesh (Xi,Yi,-Zi)
xlabel('Latitude')
ylabel('Longitude')
zlabel('Depth')
更新:我添加了以下代码行
Ci = griddata(X,Y,C,Xi,Yi);
mesh(Xi,Yi,-Zi,Ci)
得到下图,但很难说出是怎么回事,我想知道是否有办法将插值平滑到一个盒子中,使其不那么锯齿状。
谢谢!!
我假设原始 X,Y,Z,C
数据点是匹配的,您可以使用命令 mesh(X,Y,Z,C)
来获得可用的图。现在您想要做同样的事情,但使用的是插值数据集。
在这种情况下,你只需要给mesh
命令一个颜色数据C
。
C
也需要插值,所以可能是这样的:
Ci = griddata(X,Y,C,Xi,Yi); % Interpolate C the same way you did for Z
mesh(Xi,Yi,-Zi,Ci)
编辑: 对之前的错误回答表示歉意。
很难确切地知道你所说的“不起作用”是什么意思,或者你的温度矩阵 C 的性质是什么,但 C 的规范如下:
- 与Z大小相同(更具体地说,Z中的每个元素对应于相同位置的C中的每个元素)
- C 中的每个元素都是一个整数,对应于 current 颜色图中的一个位置。 (这意味着如果您更新颜色图,您的曲面图也会相应更新)
- 绘图后可以通过曲面图的
cdata
属性 检查/更改整数。
- 您可能需要更改绘图是按比例还是直接处理颜色图(即 cdatamapping)。查看对象的属性以找出答案。
我正在执行 运行 自主水下航行器任务,该任务为我提供纬度、经度、深度和温度数据,我正在尝试使用这些数据创建 3D 插值。我能够创建环境的 3D 模型,但我试图让颜色填充成为每个相关位置的插值温度。
下图是我得到的 3d 深度图,我希望填充颜色是这些位置的温度:
我尝试使用颜色图,其中 surf(X, Y, Z, C) 和 C 是温度数据,但这不起作用。
这是我的代码,其中 VPSA 是我的数据集,X = 经度,y = 纬度,Z = 深度,C = 温度
%Making Variables:
X = VPSA {:,1};
Y = VPSA {:,2};
Z = VPSA {:,3};
C = VPSA {:,4};
%Three axis plot
%Plotting Variable with coordinates
xi = linspace(min(X),max(X),1000);
yi = linspace(min(Y),max(Y),1000);
[Xi,Yi] = meshgrid(xi,yi);
Zi = griddata(X,Y,Z, Xi,Yi);
mesh (Xi,Yi,-Zi)
xlabel('Latitude')
ylabel('Longitude')
zlabel('Depth')
更新:我添加了以下代码行
Ci = griddata(X,Y,C,Xi,Yi);
mesh(Xi,Yi,-Zi,Ci)
得到下图,但很难说出是怎么回事,我想知道是否有办法将插值平滑到一个盒子中,使其不那么锯齿状。
谢谢!!
我假设原始 X,Y,Z,C
数据点是匹配的,您可以使用命令 mesh(X,Y,Z,C)
来获得可用的图。现在您想要做同样的事情,但使用的是插值数据集。
在这种情况下,你只需要给mesh
命令一个颜色数据C
。
C
也需要插值,所以可能是这样的:
Ci = griddata(X,Y,C,Xi,Yi); % Interpolate C the same way you did for Z
mesh(Xi,Yi,-Zi,Ci)
编辑: 对之前的错误回答表示歉意。
很难确切地知道你所说的“不起作用”是什么意思,或者你的温度矩阵 C 的性质是什么,但 C 的规范如下:
- 与Z大小相同(更具体地说,Z中的每个元素对应于相同位置的C中的每个元素)
- C 中的每个元素都是一个整数,对应于 current 颜色图中的一个位置。 (这意味着如果您更新颜色图,您的曲面图也会相应更新)
- 绘图后可以通过曲面图的
cdata
属性 检查/更改整数。 - 您可能需要更改绘图是按比例还是直接处理颜色图(即 cdatamapping)。查看对象的属性以找出答案。