fixed burn time calculations for multi stage burns
This commit is contained in:
+10
-72
@@ -5,84 +5,22 @@ declare function CreateDeorbit{
|
||||
parameter offsetX is 0.0.
|
||||
parameter offsetZ is 0.0.
|
||||
|
||||
local tol to 100.
|
||||
|
||||
lock steering to retrograde.
|
||||
local lock align to vDot(ship:facing:vector, retrograde:vector).
|
||||
wait until align > 0.95.
|
||||
print align.
|
||||
|
||||
if dv > 0 {
|
||||
set dv to dv * -1.
|
||||
}
|
||||
|
||||
local tr to ADDONS:TR.
|
||||
if not tr:AVAILABLE {
|
||||
print "Trajectoris is not available".
|
||||
return.
|
||||
}
|
||||
|
||||
tr:settarget(target).
|
||||
|
||||
|
||||
local deorbit to NODE(time:seconds + 200, 0, 0, dv).
|
||||
|
||||
until not hasNode{
|
||||
remove nextNode.
|
||||
wait 0.001.
|
||||
}
|
||||
|
||||
add deorbit.
|
||||
wait until tr:hasimpact.
|
||||
|
||||
local ipos to tr:impactpos.
|
||||
local lock offset to (ipos:ALTITUDEPOSITION(0) - target:ALTITUDEPOSITION(0)).
|
||||
local lock xDist to offset:x.
|
||||
local lock zDist to ipos:lat - target:lat.
|
||||
local dt is 60.
|
||||
when xDist < 500000 then{
|
||||
set dt to 30.
|
||||
}
|
||||
when xDist < 100000 then{
|
||||
set dt to 5.
|
||||
}
|
||||
when xDist < 10000 then{
|
||||
set dt to 1.
|
||||
}
|
||||
|
||||
when xDist < 5000 then{
|
||||
set dt to 0.5.
|
||||
}
|
||||
until xDist < offsetX + tol {
|
||||
remove nextNode.
|
||||
wait 0.001.
|
||||
set deorbit:eta to deorbit:eta + dt.
|
||||
add deorbit.
|
||||
wait until tr:hasimpact.
|
||||
set ipos to tr:impactpos.
|
||||
wait 0.001.
|
||||
}
|
||||
until abs(zDist) < offsetZ + tol{
|
||||
remove nextNode.
|
||||
wait 0.001.
|
||||
if zDist > 0 {
|
||||
set deorbit:normal to deorbit:normal - 0.1.
|
||||
} else{
|
||||
set deorbit:normal to deorbit:normal + 0.1.
|
||||
}
|
||||
add deorbit.
|
||||
wait until tr:hasimpact.
|
||||
set ipos to tr:impactpos.
|
||||
}
|
||||
|
||||
unlock steering.
|
||||
}
|
||||
|
||||
declare function CalculateCircularizationDV{
|
||||
parameter ap is 0.
|
||||
parameter sma is 0.
|
||||
local mu is body:mu.
|
||||
if ap = 0 {
|
||||
set ap to apoapsis.
|
||||
}
|
||||
if sma = 0 {
|
||||
set sma to orbit:semimajoraxis.
|
||||
}
|
||||
|
||||
local apR is apoapsis + body:radius.
|
||||
local apR is ap + body:radius.
|
||||
local circVel is sqrt(mu / apR).
|
||||
local apVel is sqrt(mu * ((2 / apR) - (1 / orbit:semimajoraxis))).
|
||||
local apVel is sqrt(mu * ((2 / apR) - (1 / sma))).
|
||||
return circVel - apVel.
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user