The Wall:在 Matlab 地图环境中显示垂直平面
The Wall: Display vertical planes in the Matlab Map Environment
我想在 Matlap 制图工具箱的地理投影图中绘制垂直平面。想象一下 this example resembling 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) projects and displays a geolocated data grid.
Z: M-by-N array. May contain NaN values.
我的猜测是 Z
变量必须以不同方式定义,但是如何定义?或者还有其他解决方案吗?真想用头撞墙...
我认为您的示例中有两处错误:
- MATLAB 正在绘制您不想要的面孔,因为您在
xf
、yf
和 zf
中有 四行 ...在水平和垂直相邻点之间绘制边。
xf
的最后一列(类似 yf
和 zf
)应该与第一列相同,到 "close" 方框(即画一个垂直的你错过的墙)
我的解决方案:
经过一番尝试,似乎一种解决方案是按如下方式定义 xf
、yf
和 zf
:
zf
= 2×n 矩阵,顶行全为零,底行全为所需的墙壁高度(对您来说,0.1;对于我下面的示例,1)
xf
= 2×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)对应于 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');
(注意:为了保持一致,我在这里调整了坐标轴以匹配第一张图片)
三堵墙:
我为每个 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');
(注:"box"上没有顶)
四面墙:
我为每个 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');
Ta-da! 为了让您相信盒子上没有顶部:
我想在 Matlap 制图工具箱的地理投影图中绘制垂直平面。想象一下 this example resembling 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) projects and displays a geolocated data grid.
Z: M-by-N array. May contain NaN values.
我的猜测是 Z
变量必须以不同方式定义,但是如何定义?或者还有其他解决方案吗?真想用头撞墙...
我认为您的示例中有两处错误:
- MATLAB 正在绘制您不想要的面孔,因为您在
xf
、yf
和zf
中有 四行 ...在水平和垂直相邻点之间绘制边。 xf
的最后一列(类似yf
和zf
)应该与第一列相同,到 "close" 方框(即画一个垂直的你错过的墙)
我的解决方案:
经过一番尝试,似乎一种解决方案是按如下方式定义 xf
、yf
和 zf
:
zf
= 2×n 矩阵,顶行全为零,底行全为所需的墙壁高度(对您来说,0.1;对于我下面的示例,1)xf
= 2×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)对应于 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');
三堵墙:
我为每个 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');
Ta-da! 为了让您相信盒子上没有顶部: