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; | ||
|  | 
 | ||
|  | 
 |