The Wall:在 Matlab 地图环境中显示垂直平面

The Wall: Display vertical planes in the Matlab Map Environment

我想在 Matlap 制图工具箱的地理投影图中绘制垂直平面。想象一下 this example resembling this question 中立方体的四个垂直面。问题是 Matlab 没有正确绘制所有面,如下例所示:

使用 geoshow 的最小代码示例:

xf = [ 0, 1, 1, 0;
       1, 1, 0, 0;
       1, 1, 0, 0;
       0, 1, 1, 0  ]
   
yf = [ 0, 0, 1, 1;
       0, 1, 1, 0;
       0, 1, 1, 0;
       0, 0, 1, 1 ]
    
zf = [ 0,   0,   0,   0;
       0,   0,   0,   0;
      .01, .01, .01, .01;
      .01, .01, .01, .01 ]
   
figure
axesm('miller');
geoshow(xf,yf,zf,'DisplayType','surface','FaceColor','red','FaceAlpha',0.4);
xlabel('lat')
ylabel('lon')
zlabel('alt')
view(-140,-60);

geoshow 的 documentation 说:

geoshow(lat,lon,Z) projects and displays a geolocated data grid.

Z: M-by-N array. May contain NaN values.

我的猜测是 Z 变量必须以不同方式定义,但是如何定义?或者还有其他解决方案吗?真想用头撞墙...

我认为您的示例中有两处错误:

  1. MATLAB 正在绘制您不想要的面孔​​,因为您在 xfyfzf 中有 四行 ...在水平和垂直相邻点之间绘制边。
  2. xf 的最后一列(类似 yfzf)应该与第一列相同,到 "close" 方框(即画一个垂直的你错过的墙)

我的解决方案:

经过一番尝试,似乎一种解决方案是按如下方式定义 xfyfzf

  • zf = 2×n 矩阵,顶行全为零,底行全为所需的墙壁高度(对您来说,0.1;对于我下面的示例,1)
  • xf = 2×n 矩阵,顶行和底行相同,给出定义您所在区域的正方形的纬度坐标
  • 类似地,yf = 2×n 矩阵,顶行和底行相同,给出定义您所在区域的正方形的经度坐标。

重要提示:

  • xfyfzf 的第一列和最后一列应与 "close" 房间
  • 相同
  • xf 对应的纬度实际上是 y 坐标,反之 yf

一堵墙:

只是想感受一下 geoshow 我从一堵墙开始:

geoshow([1 1; 1 1], [0 1; 0 1], [0 0; 1 1], ...
        'displaytype','surface','facecolor','red','facealpha',0.5);
view(3); xlabel('x'); ylabel('y'); zlabel('z');

注意第一个输入(全为 1)对应于 y 值,因为它们是纬度:

两堵墙:

我为每个 xfyfzf 添加了另一列:

geoshow([1 1 0; 1 1 0], [0 1 1; 0 1 1], [0 0 0; 1 1 1],... 
        'displaytype','surface','facecolor','red','facealpha',0.5);
view(3); xlabel('x'); ylabel('y'); zlabel('z');

(注意:为了保持一致,我在这里调整了坐标轴以匹配第一张图片)

三堵墙:

我为每个 xfyfzf 添加了另一列:

geoshow([1 1 0 0; 1 1 0 0],[0 1 1 0; 0 1 1 0],[0 0 0 0; 1 1 1 1],...
         'displaytype','surface','facecolor','red','facealpha',0.5);
view(3); xlabel('x'); ylabel('y'); zlabel('z');

(注:"box"上没有顶)

四面墙:

我为每个 xfyfzf 添加了另一列(第一列的副本):

geoshow([1 1 0 0 1; 1 1 0 0 1],[0 1 1 0 0; 0 1 1 0 0],[0 0 0 0 0; 1 1 1 1 1],...
         'displaytype','surface','facecolor','red','facealpha',0.5);
view(3); xlabel('x'); ylabel('y'); zlabel('z');

Ta-da! 为了让您相信盒子上没有顶部: