✍️ 田冬冬 , lxrat • 📅 2024-09-12

# -p 选项

-p 选项用于控制2D底图或3D底图的透视视角。

对于一个2D底图（比如二维平面内的矩形）或者一个3D底图（比如三维空间内的立方体）， 从不同的方向看时会看到不同的形态。该选项用于控制从怎样的透视视角去看一张图。其语法为：

> -p[x|y|z]azim[/elev[/zlevel]][+w lon0/lat0[/z0]][+v x0/y0]

azim 指定视角的方位角，即相对于北方向顺时针旋转的角度，默认值为180。

elev 指定视角的海拔，即视角相对于纸张平面向上旋转的角度，其取值范围为 0到90（不含0），其中0表示视角与纸张平面平行，90表示视角垂直于纸张平面，默认值为90。

下图给出了2D底图下透视视角取不同值时所看到的底图。

`Source Code`

对于3D底图而言（使用了 -JZ 选项），默认会在Z轴底部绘制XY平面的边框。

- 设置 zlevel 则可以指定在 Z=zlevel 平面内绘制边框

- -px|y|z 则分别用于指定绘制 YZ 平面、XZ平面或XY平面。默认为 -pz 即 绘制XY平面

下图给出了3D底图上使用不同的 -p 选项绘制出来的效果图。绘制底图使用的命令为:

    gmt basemap -R0/10/0/10/0/20 -JX3c -JZ3c -Baf -Bzaf -BwsENZ1+b -p135/40 -pdf 3D-map

`Source Code`

警告

-px 和 -py 存在已知BUG，会导致YZ平面或XZ平面无法放置到正确的位置处， 目前这一BUG尚未解决。

在绘制动画时，如果不同帧使用的 -p 透视参数不同，则由于投影的问题可能会导致 底图在纸上的位置出现不规则运动。可以有三种方式解决：

1. 加上 + 使得数据范围的中心点固定在纸张的中心

2. 加上 +w lon0/lat0/z 将地图上的某个点固定在纸张的中心

3. 加上 +v x0/y0 使得数据范围的中心点或地图上的某个点，在投影后的位置始终 固定在纸张上的 x0/y0 处

除此之外，若 -p 选项后不接任何参数，则其会继承前一GMT绘图命令的 -p 参数。