⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mc_coords.m

📁 M_MAP教你如何用MATLAB绘制海洋、大气类的图。可以使用各种投影
💻 M
字号:
function [longOUT,latOUT,phiVecOUT,thetaVecOUT]=mc_coords(optn,longIN,latIN,phiVecIN,thetaVecIN)% MP_COORD Converts between coordinate systems based on different%  poles. Generally used in space physics to plot things in%  geomagnetic (dipole) coordinate systems.%%  This function should not be used directly; instead it is%  is accessed by various high-level functions named M_*.%%  Vector rotations can be carried out using the following:%%   [latOUT,longOUT,phiVecOUT,thetaVecOUT]=M_GEO2MAG(latIN,longIN,phiVecIN,thetaVecIN)%%  where%% thetaVecIN - north component of the vector in geographic coordinates% phiVecIN   - east component of the vector in geographic coordinates% thetaVecOUT - north component of the vector in geomagnetic coordinates% phiVecOUT   - east component of the vector in geomagnetic coordinates%% References:%% Hapgood, M.A., Space Physics Coordinate Transformations:% A User Guide, Planet. Space Sci., Vol. 40, N0. 5, 1992.% Antti Pulkkinen, September 2001.% R. Pawlowicz 9/01 - Vectorized, changed functionality, put into standard M_MAP form.%% 29/Sep/2005 - fixed bug (apparently no-one ever used this option before now!)global MAP_PROJECTION MAP_COORDSpi180=pi/180;switch optn,  case 'name'    longOUT.name={'geographic','IGRF2000-geomagnetic'};    return;      case 'parameters',    switch longIN,      case 'geographic',        longOUT.name='geographic';        longOUT.lambda = 0;	longOUT.phi = 0;	      case 'IGRF2000-geomagnetic',        g10=-29615;        g11=-1728;        h11=5186;	longOUT.name='IGRF2000-geomagnetic';        longOUT.lambda=  atan(h11/g11);        longOUT.phi   =  atan((g11*cos(longOUT.lambda)+h11*sin(longOUT.lambda))/g10);            otherwise	        error('Unrecognized coordinate system');    end;    return;  case 'geo2mag',       % Rotation matrices     lambda=MAP_PROJECTION.coordsystem.lambda;     phi=MAP_PROJECTION.coordsystem.phi;     Tz=[ cos(lambda) sin(lambda) 0 ;         -sin(lambda) cos(lambda) 0 ;	      0       0           1 ];		      Ty=[ cos(phi)  0   -sin(phi) ;            0       1      0     ;          sin(phi)  0   cos(phi) ];      T=Ty*Tz;  case 'mag2geo',      % Rotation matrices     lambda=MAP_COORDS.lambda;     phi=MAP_COORDS.phi;     Tz=[ cos(-lambda) sin(-lambda) 0 ;         -sin(-lambda) cos(-lambda) 0 ;	      0           0         1 ];		      Ty=[ cos(-phi)  0   -sin(-phi) ;            0        1         0     ;          sin(-phi)  0    cos(-phi) ];      T=Tz*Ty;       end;  [n,m]=size(latIN);% Degrees to radians, and make into rows.latIN=(90 - latIN(:)')*pi180;longIN=longIN(:)'*pi180;% Transformation to cartesian coordinates.x=sin(latIN).*cos(longIN);y=sin(latIN).*sin(longIN);z=cos(latIN);% Rotations of the coordinates.tmp=T*[x; y; z];xp=tmp(1,:);yp=tmp(2,:);zp=tmp(3,:);% Transformation back to spherical coordinates. Choosing the correct quadrant.latOUT=acos(zp./sqrt(xp.^2+yp.^2+zp.^2));longOUT=atan2(yp,xp);	if nargin > 3,	% Sign change due to sign convention used here.	thetaVecIN=-thetaVecIN(:)';        phiVecIN=phiVecIN(:)';		% Computing vector rotations.	% First, transformation to cartesian coordinates.		% Rotation matrix is	% [x] [  sLcG cLcG -sG ][radial]	% [y]=[  sLsG cLsG  cG ][south ]	% [z] [   cL   -sL  0  ][east  ]		% Radial component is zero.	Xvec= 0+    cos(latIN).*cos(longIN).*thetaVecIN - sin(longIN).*phiVecIN;        Yvec= 0+    cos(latIN).*sin(longIN).*thetaVecIN + cos(longIN).*phiVecIN;        Zvec= 0+                -sin(latIN).*thetaVecIN  + 0;			% Rotations of the system.	tmp=T*[Xvec;Yvec; Zvec];	Xvecp=tmp(1,:);Yvecp=tmp(2,:);Zvecp=tmp(3,:);		% Transformation back to spherical coordinates.	thetaVecOUT=cos(latOUT).*cos(longOUT).*Xvecp + cos(latOUT).*sin(longOUT).*Yvecp -sin(latOUT).*Zvecp ;	phiVecOUT  =            -sin(longOUT).*Xvecp +              cos(longOUT).*Yvecp              +0       ;		% Sign change due to sign convention used here.	thetaVecOUT=-reshape(thetaVecOUT,n,m);        phiVecOUT  = reshape(phiVecOUT,n,m);end;% Radians to degrees.latOUT=90 - reshape(latOUT,n,m)/pi180;longOUT=reshape(longOUT,n,m)/pi180;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -