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

时间:2015-11-17 15:23:10

标签: matlab 3d matlab-figure geo

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

Example Cube with a missing face and overlapping base

使用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)项目并显示地理位置数据网格。

     

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

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

1 个答案:

答案 0 :(得分:1)

我认为你的例子中有两个问题出现了:

  1. MATLAB正在绘制您不想要的面孔​​,因为xfyfzf中有四行 ...边缘被绘制在水平和垂直相邻的点之间。
  2. xf的最后一列(类似yfzf)应与第一列相同,以及#34;关闭"方框(即绘制一个你错过的垂直墙)
  3. 我的解决方案:

    经过一段时间的游戏,看起来一个解决方案是定义您的xfyfzf,如下所示:

    • zf = 2-by-n矩阵,顶行全部为零,底行为墙壁所需的所有高度(对于您,0.1;对于下面的示例,1)
    • xf = 2-by-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' s)对应于 y-values ,因为它们是纬度: One wall

    两面墙:

    我为每个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');
    

    Two Walls (注意:我在这里调整轴以匹配第一张图片以保持一致性)

    三面墙:

    我为每个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');
    

    Three Walls (注意:"框"上没有顶部)

    四面墙:

    我为每个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');
    

    Four Walls

    Ta-da!为了说服你,盒子上没有顶部: No Top!