【问题标题】:The Wall: Display vertical planes in the Matlab Map EnvironmentThe Wall:在 Matlab 地图环境中显示垂直平面
【发布时间】:2015-11-17 15:23:09
【问题描述】:

我想在 Matlap Mapping 工具箱的地理投影图中绘制垂直平面。想象一个立方体的四个垂直面,如this example,类似于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) 投影并显示地理定位数据网格。

Z:M×N 数组。可能包含 NaN 值。

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

【问题讨论】:

    标签: matlab 3d matlab-figure geo


    【解决方案1】:

    我认为您的示例中有两个问题:

    1. MATLAB 正在绘制您不想要的面,因为您在 xfyfzf 中有 四行 ...在水平和垂直相邻点之间绘制边缘。
    2. xf 的最后一列(类似于 yfzf)应该与第一列相同,以“关闭”框(即绘制您缺少的一面垂直墙)

    我的解决方案:

    玩了一段时间后,一种解决方案似乎是定义您的xfyfzf,如下所示:

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

    重要提示:

    • xfyfzf 的第一列和最后一列应与“关闭”房间相同
    • 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');
    

    (注意:“盒子”上没有顶部)

    四面墙:

    我为每个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!为了让您相信盒子上没有顶部:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      相关资源
      最近更新 更多