gcnav.m

来自「GPS TOOLBOX包含以下内容: 1、GPS相关常量和转换因子; 2、角」· M 代码 · 共 59 行

M
59
字号
%                          gcnav.m
%  Scope:   This MATLAB macro computes the great circle navigation position,
%           velocity, and acceleration when the ECEF initial position and 
%           velocity are specified; WGS-84 constants are used.
%  Usage:   [pgcm,vgcm,agcm] = gcnav(p0,v0,deltat,nsteps)
%  Description of parameters:
%           p0     - input, ECEF position vector, the components are in meters
%           v0     - input, ECEF velocity vector, the components are in 
%                    meters/second
%           deltat - input, time step, in seconds
%           nsteps - input, number of step desired
%           pgcm   - output, ECEF great circle position, the components are 
%                    in meters; pgcm(k,:) is the k-th time step value
%           vgcm   - output, great circle velocity, the components are 
%                    in meters/second; vgcm(k,:) is the k-th time step value
%           agcm   - output, great circle acceleration, the components 
%                    are in meters/second^2; agcm(k,:) is the k-th time step 
%                    value
%  External Matlab macros used:  uverv, wgs84con
%  Last update:  05/29/00
%  Copyright (C) 1999-00 by LL Consulting. All Rights Reserved.

function  [pgcm,vgcm,agcm] = gcnav(p0,v0,deltat,nsteps)

%  Initialization

deltat2 = 0.5*deltat*deltat;
up = uverv(p0);
pgc = p0;
vgc(1) = (1. - up(1)*up(1))*v0(1) - up(1)*up(2)*v0(2) - up(1)*up(3)*v0(3);
vgc(2) = - up(2)*up(1)*v0(1) + (1. - up(2)*up(2))*v0(2) - up(2)*up(3)*v0(3);
vgc(3) = - up(3)*up(1)*v0(1) - up(3)*up(2)*v0(2) + (1. - up(3)*up(3))*v0(3);

%  Compute angular velocity 

pgcnorm2 = pgc(1)*pgc(1) + pgc(2)*pgc(2) + pgc(3)*pgc(3);
omegagc(1) = (pgc(2)*vgc(3) - pgc(3)*vgc(2)) / pgcnorm2;
omegagc(2) = (- pgc(1)*vgc(3) + pgc(3)*vgc(1)) / pgcnorm2;
omegagc(3) = (pgc(1)*vgc(2) - pgc(2)*vgc(1)) / pgcnorm2;

%  Compute great circle position, velocity, acceleration at each time step

pgcm = zeros(nsteps,3);
vgcm = zeros(nsteps,3);
agcm = zeros(nsteps,3);

for k = 1:nsteps
   
   agc(1) = omegagc(2)*vgc(3) - omegagc(3)*vgc(2);
   agc(2) = - omegagc(1)*vgc(3) - omegagc(3)*vgc(1);
   agc(3) = omegagc(1)*vgc(2) - omegagc(2)*vgc(1);
   pgc = pgc + vgc*deltat + agc*deltat2;
   vgc = vgc + agc*deltat;
   
   pgcm(k,:) = pgc;
   vgcm(k,:) = vgc;
   agcm(k,:) = agc;
  
end   

⌨️ 快捷键说明

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