UNPKG

flight-planner

Version:

Plan and route VFR flights

48 lines (47 loc) 1.96 kB
import { calculateGroundspeed, calculateWindCorrectionAngle, calculateWindVector } from "./utils"; /** * Calculates the fuel consumption for a given aircraft and flight duration. * * @param aircraft - The aircraft for which to calculate fuel consumption * @param duration - The flight duration in minutes * @returns The fuel consumption in liters, or undefined if the aircraft has no fuel consumption data */ export function calculateFuelConsumption(aircraft, duration) { if (duration < 0) { throw new Error('Duration cannot be negative'); } if (!aircraft?.fuelConsumption) { return undefined; } return aircraft.fuelConsumption * (duration / 60); } /** * Calculates the flight performance for the given aircraft, distance, true track, and wind. * * @param aircraft - The aircraft object. * @param distance - The distance in nautical miles. * @param trueTrack - The true track in degrees. * @param wind - The wind object. * @returns The aircraft performance object. */ export default function calculateFlightPerformance(aircraft, distance, trueTrack, wind) { if (!aircraft.cruiseSpeed) { return undefined; } const windVector = calculateWindVector(wind, trueTrack); const wca = calculateWindCorrectionAngle(wind, trueTrack, aircraft.cruiseSpeed); const heading = trueTrack + wca; // TODO: Correct for magnetic variation const groundSpeed = calculateGroundspeed(wind, aircraft.cruiseSpeed, heading); const duration = (distance / groundSpeed) * 60; const fuelConsumption = calculateFuelConsumption(aircraft, duration); return { headWind: windVector.headwind, crossWind: windVector.crosswind, trueAirSpeed: aircraft.cruiseSpeed, // TODO: Correct for altitude, temperature windCorrectionAngle: wca, heading: heading, groundSpeed: groundSpeed, duration: duration, fuelConsumption: fuelConsumption }; }