56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Matlab
		
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Matlab
		
	
	
| function [dx,dy,dz]=ct2ENU(dX,dY,dZ,lat,lon)
 | |
| % CT2LG  Converts CT coordinate differences to local geodetic.
 | |
| %   Local origin at lat,lon,h. If lat,lon are vectors, dx,dy,dz
 | |
| %   are referenced to orgin at lat,lon of same index. If
 | |
| %   astronomic lat,lon input, output is in local astronomic
 | |
| %   system. Vectorized in both dx,dy,dz and lat,lon. See also
 | |
| %   LG2CT.
 | |
| % Version: 2011-02-19
 | |
| % Useage:  [dx,dy,dz]=ct2lg(dX,dY,dZ,lat,lon)
 | |
| % Input:   dX  - vector of X coordinate differences in CT
 | |
| %          dY  - vector of Y coordinate differences in CT
 | |
| %          dZ  - vector of Z coordinate differences in CT
 | |
| %          lat - lat(s) of local system origin (rad); may be vector
 | |
| %          lon - lon(s) of local system origin (rad); may be vector
 | |
| % Output:  dx  - vector of x coordinates in local system (east)
 | |
| %          dy  - vector of y coordinates in local system (north)
 | |
| %          dz  - vector of z coordinates in local system (up)
 | |
| 
 | |
| % Copyright (c) 2011, Michael R. Craymer
 | |
| % All rights reserved.
 | |
| % Email: mike@craymer.com
 | |
| 
 | |
| if nargin ~= 5
 | |
|   warning('Incorrect number of input arguements');
 | |
|   return
 | |
| end
 | |
| 
 | |
| n=length(dX);
 | |
| if length(lat)==1
 | |
|   lat=ones(n,1)*lat;
 | |
|   lon=ones(n,1)*lon;
 | |
| end
 | |
| R=zeros(3,3,n);
 | |
| 
 | |
| R(1,1,:)=-sin(lat').*cos(lon');
 | |
| R(1,2,:)=-sin(lat').*sin(lon');
 | |
| R(1,3,:)=cos(lat');
 | |
| R(2,1,:)=sin(lon');
 | |
| R(2,2,:)=-cos(lon');
 | |
| R(2,3,:)=zeros(1,n);
 | |
| R(3,1,:)=cos(lat').*cos(lon');
 | |
| R(3,2,:)=cos(lat').*sin(lon');
 | |
| R(3,3,:)=sin(lat');
 | |
| 
 | |
| RR=reshape(R(1,:,:),3,n);
 | |
| dx_temp=sum(RR'.*[dX dY dZ],2);
 | |
| RR=reshape(R(2,:,:),3,n);
 | |
| dy_temp=sum(RR'.*[dX dY dZ],2);
 | |
| RR=reshape(R(3,:,:),3,n);
 | |
| dz=sum(RR'.*[dX dY dZ],2);
 | |
| 
 | |
| dx = -dy_temp;
 | |
| dy = dx_temp;
 | |
| 
 | |
| 
 |