-
Notifications
You must be signed in to change notification settings - Fork 1
/
gravity_turn_events.m
43 lines (34 loc) · 887 Bytes
/
gravity_turn_events.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
% 1: turnFinal height reached
% 2: Out of fuel
% 3: Surface collision
% 4: Exit atmosphere
% 5: Dropped below turnInitial
% 6: Projected apoapsis reached
function [value, isterminal, direction] = gravity_turn_events(~,Z)
global CRAFT PLANET ATMOSPHERE TARGET
MF = CRAFT(5);
R = PLANET(2);
S = PLANET(4);
AH = ATMOSPHERE(2);
TI = TARGET(1);
TF = TARGET(2);
OT = TARGET(5);
x = Z(1);
y = Z(2);
vx = Z(3);
vy = Z(4);
m = Z(5);
p = [x,y,0];
v = [vx,vy,0];
d = norm(p);
s = norm(v);
h = d-R;
eng = s^2/2-S/d;
angm = cross(p,v);
e = norm(cross(v,angm)/S-p/d);
a = -S/(2*eng);
apoapsis = a*(1+e)-R;
value = [h-TF; m-MF; h; h-AH; h-TI; apoapsis-OT];
isterminal = [1; 1; 1; 1; 1; 1];
direction = [1; -1; -1; 1; -1; 0];
end