class KerbalDyn::OrbitalManeuver::Bielliptic

Attributes

transfer_radius[RW]

Public Class Methods

new(initial_orbit, final_orbit, options={}) click to toggle source

A special 3-burn orbital maneuver between two circular orbits through the transfer_radius options.

Note that all orbits are circularized before being used.

The first burn moves from the initial orbit to the transfer radius, the second burn (at the transfer radius) moves the periapsis of the transfer orbit to the final orbit. The thrid burn circularizes to the final orbit.

Calls superclass method KerbalDyn::OrbitalManeuver::Base::new
# File lib/kerbaldyn/orbital_maneuver/bielliptic.rb, line 14
def initialize(initial_orbit, final_orbit, options={})
  options = {:transfer_radius => final_orbit.semimajor_axis}.merge(options)
  super(initial_orbit.circularize, final_orbit.circularize, options)
end

Public Instance Methods

burn_events() click to toggle source
# File lib/kerbaldyn/orbital_maneuver/bielliptic.rb, line 38
def burn_events
  r1 = self.initial_orbit.periapsis
  r2 = self.final_orbit.periapsis
  rt = self.transfer_radius

  ito = self.initial_transfer_orbit
  v11, v12 = (rt >= r1) ? [ito.periapsis_velocity, ito.apoapsis_velocity] : [ito.apoapsis_velocity, ito.periapsis_velocity]

  fto = self.final_transfer_orbit
  v21, v22 = (rt < r2) ? [fto.periapsis_velocity, fto.apoapsis_velocity] : [fto.apoapsis_velocity, fto.periapsis_velocity]

  t1 = self.initial_transfer_orbit.period / 2.0
  t2 = self.final_transfer_orbit.period / 2.0

  return [
    BurnEvent.new(:initial_velocity => self.initial_orbit.mean_velocity, :final_velocity => v11, :time => 0.0, :orbital_radius => self.initial_orbit.semimajor_axis, :mean_anomaly => 0.0),
    BurnEvent.new(:initial_velocity => v12, :final_velocity => v21, :time => t1, :orbital_radius => self.transfer_radius, :mean_anomaly => Math::PI),
    BurnEvent.new(:initial_velocity => v22, :final_velocity => self.final_orbit.mean_velocity, :time => t1+t2, :mean_anomaly => 2.0 * Math::PI)
  ]
end
final_transfer_orbit() click to toggle source
# File lib/kerbaldyn/orbital_maneuver/bielliptic.rb, line 28
def final_transfer_orbit
  r2 = self.final_orbit.periapsis
  rt = self.transfer_radius
  return Orbit.new(self.initial_orbit.primary_body, :periapsis => [r2,rt].min, :apoapsis => [r2,rt].max)
end
initial_transfer_orbit() click to toggle source
# File lib/kerbaldyn/orbital_maneuver/bielliptic.rb, line 22
def initial_transfer_orbit
  r1 = self.initial_orbit.periapsis
  rt = self.transfer_radius
  return Orbit.new(self.initial_orbit.primary_body, :periapsis => [r1,rt].min, :apoapsis => [r1,rt].max)
end
orbits() click to toggle source
# File lib/kerbaldyn/orbital_maneuver/bielliptic.rb, line 34
def orbits
  return [self.initial_orbit, self.initial_transfer_orbit, self.final_transfer_orbit.second, self.final_orbit]
end