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