首页 文章

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

提问于
浏览
2

我想在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);

1775064 for geoshow说:

geoshow(lat,lon,Z)项目并显示地理定位数据网格 . Z:M-by-N阵列 . 可能包含NaN值 .

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

1 回答

  • 1

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

    • MATLAB正在绘制您不想要的面,因为 xfyfzf 中有四行...在水平和垂直相邻点之间绘制边 .

    • xf 的最后一列(类似地 yfzf )应该与第一列相同,到"close"框(即画出你丢失的一个垂直墙)

    My solution:

    在一些游戏之后,看起来一个解决方案是定义你的 xfyfzf ,如下所示:

    • zf = 2-by-n矩阵,顶行全部为零,底行所有所需的墙壁高度(对于你,0.1;对于我下面的例子,1)

    • xf = 2×n矩阵,顶部和底部行相同,给出定义您所在地区的正方形的纬度坐标

    • 类似地, yf = 2×n矩阵,顶部和底部行相同,给出定义您的区域的正方形的经度坐标 .

    重要笔记:

    • xfyfzf 的第一列和最后一列应与"close"相同

    • xf 对应于此处实际为 y 坐标的纬度,反之亦然 yf

    One Wall:

    只是试图感受 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值,因为它们是纬度:
    One wall

    Two Walls:

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

    Three 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
    (注意:"box"上没有顶部)

    Four 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!

相关问题