Пример #1
0
def calculateMovement(coreFunctions, parameters, weather, state, instruction):
    # (coreFunctions:SimulationCoreFunctions)
    # (parameters:FlightParameters) 
    # (weather:WeatherState) (state:FlightState) (instruction:Instruction)
    time = parameters.ActualGateDepartureTime + state.TimeElapsed*1.0 # <Time/Hours>
    currentPosition = state.AircraftPosition
    altitude = Spatial.positionToAltitude(currentPosition)

    grossWeight = coreFunctions.WeightModel(parameters, state)
    (destination, instructedAirSpeed) = instruction

    currentLocation = Spatial.positionToLocation(currentPosition)
    destinationLocation = Spatial.positionToLocation(destination)
    destinationAltitude = coreFunctions.AltitudeLimiter(grossWeight,
            Spatial.positionToAltitude(destination))
    airSpeed = coreFunctions.AirSpeedLimiter(
        parameters.AircraftType.MaximumMachSpeed,
        grossWeight, altitude, instructedAirSpeed)
    deltaVector = Spatial.calculateLocationDifference(currentLocation, destinationLocation)
    distance = Spatial.calculateDistance1(currentLocation, destinationLocation)
    if distance <= 0.0 :
        zeroGroundSpeed = Spatial.Vector(0.0, 0.0)
        return (0.0, zeroGroundSpeed, 0.0, 0.0, 0.0, [])
    else:
        #windVector = getWindVelocity(weather, time, currentPosition)
        windVector = Weather.zeroWindVelocity
        groundSpeed = Movement.calculateGroundVelocity(airSpeed, 
                                                       Spatial.calculateRadians(deltaVector),
                                                       windVector)
        groundVector = Movement.rescale(deltaVector, groundSpeed)
        (cruiseBurn, verticalCruiseFuelDiff, verticalVelocity) =  \
        coreFunctions.FuelModel(FuelModel.flightFunctions, grossWeight, altitude, 
                                airSpeed,
                                FlightTypes.getVerticalState(altitude, destinationAltitude))
        return (cruiseBurn, groundVector, verticalCruiseFuelDiff, verticalVelocity, airSpeed, [])
Пример #2
0
def calculateGroundVelocity(airspeed, groundDirection, wind):
    windDirection = Spatial.calculateRadians(wind)
    windspeed = Spatial.calculateMagnitude(wind)
    aDirection = (windDirection - groundDirection) % ( 2 * math.pi)
    precision = 1e-6
    
    # no wind, groundspeed is airspeed
    if windspeed <= precision:
        return airspeed
    elif math.fAbs(aDirection) <= precision: # then // Same direction
        return airspeed + windspeed
    elif math.fabs(aDirection - math.pi) <= precision: # then // Opposite direction
        return airspeed - windspeed
    else:
        w = math.asin((windspeed * math.sin(aDirection)) / airspeed)
        g = math.pi - aDirection - w
        return airspeed * math.sin(g) / math.sin(aDirection)
Пример #3
0
def calculateGroundVelocity(airspeed, groundDirection, wind):
    windDirection = Spatial.calculateRadians(wind)
    windspeed = Spatial.calculateMagnitude(wind)
    aDirection = (windDirection - groundDirection) % (2 * math.pi)
    precision = 1e-6

    # no wind, groundspeed is airspeed
    if windspeed <= precision:
        return airspeed
    elif math.fAbs(aDirection) <= precision:  # then // Same direction
        return airspeed + windspeed
    elif math.fabs(aDirection -
                   math.pi) <= precision:  # then // Opposite direction
        return airspeed - windspeed
    else:
        w = math.asin((windspeed * math.sin(aDirection)) / airspeed)
        g = math.pi - aDirection - w
        return airspeed * math.sin(g) / math.sin(aDirection)
Пример #4
0
def calculateMovement(coreFunctions, parameters, weather, state, instruction):
    # (coreFunctions:SimulationCoreFunctions)
    # (parameters:FlightParameters)
    # (weather:WeatherState) (state:FlightState) (instruction:Instruction)
    time = parameters.ActualGateDepartureTime + state.TimeElapsed * 1.0  # <Time/Hours>
    currentPosition = state.AircraftPosition
    altitude = Spatial.positionToAltitude(currentPosition)

    grossWeight = coreFunctions.WeightModel(parameters, state)
    (destination, instructedAirSpeed) = instruction

    currentLocation = Spatial.positionToLocation(currentPosition)
    destinationLocation = Spatial.positionToLocation(destination)
    destinationAltitude = coreFunctions.AltitudeLimiter(
        grossWeight, Spatial.positionToAltitude(destination))
    airSpeed = coreFunctions.AirSpeedLimiter(
        parameters.AircraftType.MaximumMachSpeed, grossWeight, altitude,
        instructedAirSpeed)
    deltaVector = Spatial.calculateLocationDifference(currentLocation,
                                                      destinationLocation)
    distance = Spatial.calculateDistance1(currentLocation, destinationLocation)
    if distance <= 0.0:
        zeroGroundSpeed = Spatial.Vector(0.0, 0.0)
        return (0.0, zeroGroundSpeed, 0.0, 0.0, 0.0, [])
    else:
        #windVector = getWindVelocity(weather, time, currentPosition)
        windVector = Weather.zeroWindVelocity
        groundSpeed = Movement.calculateGroundVelocity(
            airSpeed, Spatial.calculateRadians(deltaVector), windVector)
        groundVector = Movement.rescale(deltaVector, groundSpeed)
        (cruiseBurn, verticalCruiseFuelDiff, verticalVelocity) =  \
        coreFunctions.FuelModel(FuelModel.flightFunctions, grossWeight, altitude,
                                airSpeed,
                                FlightTypes.getVerticalState(altitude, destinationAltitude))
        return (cruiseBurn, groundVector, verticalCruiseFuelDiff,
                verticalVelocity, airSpeed, [])