Ejemplo n.º 1
0
def flyby_height_objective(periapsis, *params):

    aIn, aOut, deltaAngle, body = params

    eccIn = 1 - periapsis / aIn
    eccOut = 1 - periapsis / aOut

    inOrb = Orbit(aIn, eccIn, 0, 0, 0, 0, 0, body)
    outOrb = Orbit(aOut, eccOut, 0, 0, 0, 0, 0, body)

    deltaIn = inOrb.get_flight_angle_at_soi()
    deltaOut = outOrb.get_flight_angle_at_soi()

    return abs(deltaAngle - deltaIn - deltaOut)
Ejemplo n.º 2
0
def get_flyby_orbit(a, ecc, body, inOutDir, nDir, isOut=False):

    periapsis = a * (1 - ecc)

    tempOrb = Orbit(a, ecc, 0, 0, 0, 0, 0, body)
    delta = tempOrb.get_flight_angle_at_soi(isOut)

    rpDir = rodrigues_rotate(inOutDir, nDir, delta)
    vpDir = cross(nDir, rpDir)

    rp = rpDir * periapsis
    vp = vpDir * math.sqrt(body.mu * (2 / periapsis - 1 / a))

    return Orbit.from_state_vector(rp, vp, 0, body)