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

墙:在Matlab地图环境中显示垂直平面,matlab,3d,matlab-figure,geo,Matlab,3d,Matlab Figure,Geo,我想在Matlap Mapping工具箱中的地理投影图形中绘制垂直平面。想象一下一个立方体的四个垂直面,就像一个立方体。问题在于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;

我想在Matlap Mapping工具箱中的地理投影图形中绘制垂直平面。想象一下一个立方体的四个垂直面,就像一个立方体。问题在于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(lat、lon、Z)投影并显示地理定位的数据网格

Z:M-x-N阵列。可能包含NaN值


我的猜测是
Z
变量的定义必须不同,但是如何定义呢?还是有其他解决办法?我真的很想把头撞到墙上…

我认为在你的例子中有两件事出错了:

  • MATLAB正在绘制您不想要的面,因为在
    xf
    yf
    zf
    中有四行。。。在水平和垂直相邻点之间绘制边
  • xf
    (类似于
    yf
    zf
    )的最后一列应与第一列相同,以“关闭”框(即绘制缺少的一面垂直墙)
  • 我的解决方案:

    在一些播放之后,一个解决方案似乎是定义您的
    xf
    yf
    zf
    ,如下所示:

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

    • xf
      yf
      zf
      的第一列和最后一列应与“关闭”房间相同
    • 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值,因为它们是纬度:

    两面墙:

    我在每个
    xf
    yf
    zf
    中添加了另一列:

    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');
    
    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');
    
    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');
    
    (注意:为了保持一致性,我在这里调整了轴以匹配第一张图片)

    三面墙:

    我在每个
    xf
    yf
    zf
    中添加了另一列:

    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');
    
    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');
    
    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');
    
    (注:“盒子”上没有顶部)

    四面墙:

    我在每个
    xf
    yf
    zf
    中添加了另一列(第一列的副本):

    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');
    
    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');
    
    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要说服您盒子上没有盖子: