-
Notifications
You must be signed in to change notification settings - Fork 1
/
PlanetSpherical.m
51 lines (44 loc) · 1.1 KB
/
PlanetSpherical.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
classdef PlanetSpherical < Planet
% PlanetSpherical
methods
% Constructor
function self = PlanetSpherical(data)
% Call superclass constructor
self@Planet(data);
% Construct sphere object
self.ellipsoid = referenceSphere;
self.ellipsoid.Radius = self.R;
end
% ECEF -> LLA (vectorized)
function [lat, lon, alt, rad, Lie] = xyz2lla(self, x, y, z, ~)
rad = sqrt(sum([x, y, z].^2, 2));
lat = asin(-y ./ rad);
lon = atan2(x, -z);
alt = rad - self.R;
Lie = speye(3 * numel(x));
end
% ECEF -> LLA
function [lat, lon, alt] = X2lla(self, X, ~)
rad = norm(X);
lat = asin(-X(2) ./ rad);
lon = atan2(X(1), -X(3));
alt = rad - self.R;
end
% LLA -> ECEF
function [x, y, z, Lei] = lla2xyz(self, lat, lon, alt)
rad = self.R + alt;
x = rad * cos(lat) * sin(lon);
z = -rad * cos(lat) * cos(lon);
y = -rad * sin(lat);
Lei = eye(3);
end
% Standard Newtonian Gravity
function g = gravity(self, rad, ~, ~, ~)
g = self.mu ./ rad.^2;
end
% Fixed atmosphere in this case
function vel = atmspeed(~, rad, ~)
vel = zeros(numel(rad), 1);
end
end
end