Guest User

EquidistantOrbitPlanner.r

a guest
Mar 29th, 2014
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 2.10 KB | None | 0 0
  1. # EquidistantOrbitPlanner.r
  2.  
  3. # Input parameters
  4. numberOfSatsInOrbit         = 4
  5. targetedSurfaceAltitudeKM   = 1000          # Input in kilometers, since that's how you'll see it in KSP.
  6. celestialBodyName           = "Kerbin"
  7. insertionOrbitLongOrShort   = "short"       # long inserts you behind the previous position in the orbit, and short inserts you ahead of it.
  8.  
  9. # Start
  10. kspConstsDataFrame  = read.table("~/Documents/Code/R/KSP Calculations/KSPConstants.txt")
  11. kspConstsMatrix     = as.matrix(kspConstsDataFrame)
  12. celestialBodyIndex  = which(colnames(kspConstsMatrix)==celestialBodyName)
  13. objectRadiusIndex   = which(rownames(kspConstsMatrix)=="radius")
  14. objectRadius        = as.real(kspConstsMatrix[objectRadiusIndex,celestialBodyIndex])
  15. gravParamIndex      = which(rownames(kspConstsMatrix)=="gravitationalParameter")
  16. gravParam           = as.real(kspConstsMatrix[gravParamIndex,celestialBodyIndex])
  17. if(insertionOrbitLongOrShort == "short"){
  18.     insertionOrbitSign = -1
  19. }else{
  20.     insertionOrbitSign = 1
  21. }
  22.  
  23. # Calaculate insertion orbit's apoapsis-altitude for desired the targeted circular orbit.
  24. targetedSurfaceAltitude                 = targetedSurfaceAltitudeKM * 1000
  25. targetCoreAltitude                      = targetedSurfaceAltitude + objectRadius
  26. targetOrbitalPeriod                     = 2*pi*sqrt((targetCoreAltitude^3)/gravParam)   # aka, period of the circular orbit
  27. insertionOrbitPeriod                    = (((numberOfSatsInOrbit + insertionOrbitSign) / numberOfSatsInOrbit)) * targetOrbitalPeriod
  28. insertionOrbitSemimajorAxis             = (gravParam*(insertionOrbitPeriod/(2*pi))^2)^(1/3)
  29. insertionOrbitApoapsisCoreAltitude      = (2*insertionOrbitSemimajorAxis-targetCoreAltitude)    # circular altitude ideally is equal to periapsis
  30. insertionOrbitApoapsisSurfaceAltitude   = insertionOrbitApoapsisCoreAltitude - objectRadius
  31. insertionOrbitApoapsisSurfaceAltitudeKM = insertionOrbitApoapsisSurfaceAltitude/1000
  32.  
  33. # Output
  34. sprintf("Insertion orbit's apoapsis altitude:  %f (km)",    insertionOrbitApoapsisSurfaceAltitudeKM)
  35. sprintf("Insertion orbit's period:  %f (s)  or %f (hr)",    insertionOrbitPeriod, insertionOrbitPeriod/3600)
  36. sprintf("Target orbit's period:  %f (s)  or %f (hr)",       targetOrbitalPeriod, targetOrbitalPeriod/3600)
Advertisement
Add Comment
Please, Sign In to add comment