我想在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-by-N阵列。可能包含NaN值。
我的猜测是Z
变量必须以不同的方式定义,但是如何?还是有其他解决方案吗?我真的觉得我的头撞在墙上......
答案 0 :(得分:1)
我认为你的例子中有两个问题出现了:
xf
,yf
和zf
中有四行 ...边缘被绘制在水平和垂直相邻的点之间。xf
的最后一列(类似yf
和zf
)应与第一列相同,以及#34;关闭"方框(即绘制一个你错过的垂直墙)我的解决方案:
经过一段时间的游戏,看起来一个解决方案是定义您的xf
,yf
和zf
,如下所示:
zf
= 2-by-n矩阵,顶行全部为零,底行为墙壁所需的所有高度(对于您,0.1;对于下面的示例,1)xf
= 2-by-n矩阵,顶行和底行相同,给出定义您所在地区的正方形的纬度坐标yf
= 2×n矩阵,顶行和底行相同,给出定义您所在地区的正方形的经度坐标。重要说明:
xf
,yf
和zf
的第一列和最后一列应与" 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 ,因为它们是纬度:
两面墙:
我为每个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');
三面墙:
我为每个xf
,yf
和zf
添加了另一列:
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');
四面墙:
我为每个xf
,yf
和zf
添加了另一列(第一列的副本):
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');