- 积分
- 15399
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-9-8
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 sfhstcn2 于 2015-8-23 21:37 编辑
给大家来个实用价值不太高,但挺有意思的程序。该程序可以在m_map的地图投影下的图中添加箭头。用法如下:[ h1,h2,h3,h4 ] = m_arrow( lon,lat,arlth,arwth,arpos,arsty,col,lwth,lsty )。
lon和lat需要是维度相同的数组,分别表示所在点经度和纬度。具体用法和line(x,y)相同,不同点就在于在每条line上均添加了箭头。
lon=[x1,x2,x3],lat=[y1,y2,y3],那么将依次画(x1,y1)到(x2,y2)到(x3,y3)的直线+箭头;
又如
lon=[x11,x12;x21,x22],lat=[y11,y12;y21,y22],将分别画(x11,y11)到(x21,y21)和(x21,y21)到(x22,y22)的直线+箭头。
鉴于楼主的水平有限,后面那一堆控制参量没能设置成varargin,现就一一讲一下具体意义。
arlth表示箭头那一撇的长度,单位是地图上经纬度的°;
arwth表示箭头所张角度,单位还是°;
arpos表示箭头相对于直线所在的位置,任何实数都可以取,0表示在直线尾,1表示线头,以此类推(这是个神奇的变量);
arsty表示箭头的形状,鉴于作者水平,这里只有两种可选,0表示->这样的,1表示那种实心的;
col控制color;
lwth控制输出直线的线宽;
lsty控制输出直线的线型;
没有varargin,所以最好是把所有变量都写出来,就像这样:m_arrow(a,b,2,60,-.1,1,'k',3,'-');
当然也可以这样:[h1,h2,h3,h4]=m_arrow(a,b);其它变量用内定的很丑,不过可以控制句柄设置,h1~h3为line,h4为patch。
就像图1中的3个箭头,设置好地图投影后,只需要把它们的始终经纬度写好,就能画了。
m_proj('Equidistant cylindrical','lon',[70,130],'lat',[25,50]);
a = [94.6,94.5,100.2;93.3,97.7,101.4];
b = [48.9,39.7,34;44.7,37.7,30.6];
m_arrow(a,b,2,60,-.1,1,'k',3,'-');
另外,为啥arpos是个神奇的变量,因为我们看到,这样画出来的箭头特别是在线宽很宽的时候常会有一些直线冒头或者箭头缺角的现象,因此适量调整arpos就可以遮住那些丑的地方了。
最后关于图2那个弧形的箭头是怎么画的,其实我先做的3次样条插值spline画的弧线,然后取尾端的两组数来画箭头。
Y = 16.5:.05:33.3;
X = spline([16.5,24.2,33.3],[115,112,126.9],Y);
m_plot(X,Y,'Color',[0.341 0.200 0.0745],'linewidth',3,'linestyle','-');
L = length(X);
m_arrow([X(L-1),X(L)],[Y(L-1),Y(L)],1.6,72,1,0,[0.341 0.200 0.0745],3,'-');
这样...还有个没法解决的问题,由于图片经纬度的长宽比,会使箭头拉伸变形,所以有些将就了...
|
-
500hPa天气图
-
水汽通量
-
-
m_arrow.m
1.81 KB, 下载次数: 77, 下载积分: 金钱 -5
评分
-
查看全部评分
|