|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
2 G( H( `# {; g f
m_map可以画出很漂亮的图
. @$ t6 E* G/ v3 Z0 _; p8 j3 Z7 t5 O9 E2 F# a7 K) n% |3 t
如果想在m_map的指定投影上画图必须使用m_text,m_quiver,m_pcolor等前面加了‘m_'的函数,那么这些函数与text,quiver,pcolor等普通matlab函数有什么区别呢?让我来分析一下m_plot的代码为大家解答吧。
6 K8 L: f; g/ k8 r! `% b; C8 b8 A" K; w
m_plot代码如下:
% S8 }- R; U5 P O
" t+ M& l- \& @" Pfunction han = m_plot(varargin). b8 O9 U2 q4 Y. g
0 b& p& P0 A+ s7 \%将用户输入参数放在varargin中,这个varargin是个大小可变的cell数组,6 ?4 Q, u. s7 i, a0 b3 Q% F* a
4 _; x9 d+ X T& O5 ?. j%这样设计的好处是m_plot就和plot一样是一个输入参数可变的函数了
2 }( q! [/ }/ f6 E5 M: @: T0 F! hglobal MAP_PROJECTION MAP_VAR_LIST+ ^( Y5 {0 p( h4 X: B1 _
if isempty(MAP_PROJECTION), %判断有没有设定投影方式' N2 Y) p# z8 I) j! ~
disp('No Map Projection initialized - call M_PROJ first!');: j* y/ S7 Z% L
return;
. }8 L+ q% m( V% n# mend;' m) n+ T. y, _6 B9 V2 Y7 D) y$ m
if nargin < 2; %判断输入参数的个数,小于2的话就好好查看一下m_plot函数的用法
3 C# e! c6 s' Y2 n; i' [ help m_plot
! j s- p0 C! _; M9 ~& M. | return
, {8 F! U4 Y/ vend) r& X0 b' L1 b- F% U8 R6 i* h. T4 e
[x,y] = m_ll2xy(varargin{1},varargin{2});: x$ N/ s! [( n+ W
- H* W5 A/ q4 P
%m_ll2xy这个函数会根据当前投影的方式将varargin{1},varargin{2}也就是笛卡尔坐标系的横纵坐标进行转化
+ C/ p4 f2 s2 I2 }5 Jvarargin = varargin(:); %将cell数组由一行变成一列
+ M5 X8 h" T9 j8 U! _s = size(varargin,1); %s为cell数组的行数,也就是输入参数个数% J! L7 \: g) _( V4 Y+ D
h=plot(x,y,varargin{3:s}); %调用plot函数,m_map里大部分函数都是如此,最终都要调用系统函数 W8 X/ l' K2 I+ S: N8 C$ A
if nargout == 1 %判断输出变量个数是否为1
4 S# G4 B5 U3 I5 k8 Z' x han = h;
" F% D2 L: `* q" Pend6 J$ ~' S3 Z4 |8 K
) A* C( p2 M- f( {, W+ F+ g
return) y3 O$ ]+ i' X
' A% x* f1 }9 S2 k: [7 I% | 既然明白了m_map的基本原理,我们就可以自己为m_map添加函数了,比如m_map工具包没有m_scatter, 没关系,我们可以自己写啊,很简单的!" Q: w8 n* Y6 a
* S1 j) a0 a, s8 h7 b6 e% k4 i
function han = m_scatter(varargin)
6 `2 T8 w1 T n+ ?9 R, b' ~% written by Haidong Pan (Ocean University of China) 潘海东 (中国海洋大学)
7 K) h! ~( N& @' i) S% email: panhaidong_phd@qq.com
) ~& b A& G# o# N% _% d1 k7 W% n4 L$ {6 D l7 G6 W: I/ [
global MAP_PROJECTION MAP_VAR_LIST5 t: H% W) |2 z! O
K) e# B8 R3 w# {. |
if isempty(MAP_PROJECTION),3 n- I3 x$ Z, Q: ?" C. Z
disp('No Map Projection initialized - call M_PROJ first!');
% H) j- t& c6 D return;8 I$ v& U7 J% {$ S' D
end;
1 I/ i" P( C6 b2 B5 H9 q) a' _7 f& M: } n% C
[x,y] = m_ll2xy(varargin{1},varargin{2});
6 p# c/ C( k2 z+ L& u$ Pvarargin = varargin(:);
+ b X2 R& Y, V3 S( ss = size(varargin,1);. y8 c' y* ?: K: \% I. b
h=scatter(x,y,varargin{3:s});
9 Q1 k+ y9 e4 b- n% o# H7 Y5 Zif nargout == 1
/ K" W: L1 W% V( O han = h;
1 Y+ M% c. R' W& l: Lend! B0 B% m4 P, s- D3 s% l7 b# U
* Q& ~% o N7 r8 q4 q
return |
|