Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # EquidistantOrbitPlanner.r
- # Input parameters
- numberOfSatsInOrbit = 4
- targetedSurfaceAltitudeKM = 1000 # Input in kilometers, since that's how you'll see it in KSP.
- celestialBodyName = "Kerbin"
- insertionOrbitLongOrShort = "short" # long inserts you behind the previous position in the orbit, and short inserts you ahead of it.
- # Start
- kspConstsDataFrame = read.table("~/Documents/Code/R/KSP Calculations/KSPConstants.txt")
- kspConstsMatrix = as.matrix(kspConstsDataFrame)
- celestialBodyIndex = which(colnames(kspConstsMatrix)==celestialBodyName)
- objectRadiusIndex = which(rownames(kspConstsMatrix)=="radius")
- objectRadius = as.real(kspConstsMatrix[objectRadiusIndex,celestialBodyIndex])
- gravParamIndex = which(rownames(kspConstsMatrix)=="gravitationalParameter")
- gravParam = as.real(kspConstsMatrix[gravParamIndex,celestialBodyIndex])
- if(insertionOrbitLongOrShort == "short"){
- insertionOrbitSign = -1
- }else{
- insertionOrbitSign = 1
- }
- # Calaculate insertion orbit's apoapsis-altitude for desired the targeted circular orbit.
- targetedSurfaceAltitude = targetedSurfaceAltitudeKM * 1000
- targetCoreAltitude = targetedSurfaceAltitude + objectRadius
- targetOrbitalPeriod = 2*pi*sqrt((targetCoreAltitude^3)/gravParam) # aka, period of the circular orbit
- insertionOrbitPeriod = (((numberOfSatsInOrbit + insertionOrbitSign) / numberOfSatsInOrbit)) * targetOrbitalPeriod
- insertionOrbitSemimajorAxis = (gravParam*(insertionOrbitPeriod/(2*pi))^2)^(1/3)
- insertionOrbitApoapsisCoreAltitude = (2*insertionOrbitSemimajorAxis-targetCoreAltitude) # circular altitude ideally is equal to periapsis
- insertionOrbitApoapsisSurfaceAltitude = insertionOrbitApoapsisCoreAltitude - objectRadius
- insertionOrbitApoapsisSurfaceAltitudeKM = insertionOrbitApoapsisSurfaceAltitude/1000
- # Output
- sprintf("Insertion orbit's apoapsis altitude: %f (km)", insertionOrbitApoapsisSurfaceAltitudeKM)
- sprintf("Insertion orbit's period: %f (s) or %f (hr)", insertionOrbitPeriod, insertionOrbitPeriod/3600)
- sprintf("Target orbit's period: %f (s) or %f (hr)", targetOrbitalPeriod, targetOrbitalPeriod/3600)
Advertisement
Add Comment
Please, Sign In to add comment