航空燃料計算機

航空燃料計算機 (簡易推定)

燃料(kg)と消費率(kg/s)から飛行可能時間を算出します。機種選択や風向きの影響も反映可能。

入力

※通常は機種ごとの「kg / hour」などで管理します。ここは直接入力できます。

風向・風速(簡易考慮)

—
計算は簡易モデルです。実運用では機種性能表(AFM/POH)を参照してください。
注:機種の燃料消費例は参考値(推定)です。正確なフライト・プランニングには公式データを使ってください。

説明・仮定

  • 基本計算:飛行可能時間(秒) = 燃料(kg) / 消費率(kg/s)
  • 風速はノット(kt)単位で入力され、内部でm/sに変換されます。
  • 風の影響は進行方向成分を用いた簡易補正を行います。

機種リスト(例)

・Cessna 172 — 25 kg/hr
・ATR72 — 800 kg/hr
・B737-800 — 2600 kg/hr
・A320 — 2500 kg/hr
・B777 — 7000 kg/hr
・B787 — 5600 kg/hr
・B747 — 10000 kg/hr
・A350 — 5800 kg/hr
・A330 — 5600 kg/hr
・A340 — 7200 kg/hr
開発メモ:風速はノット→m/s変換(×0.514444)で処理しています。
const toRad = d => d * Math.PI / 180; const ktToMs = kt => kt * 0.514444; function kgphToKgps(kgph){ return kgph / 3600; } const select = document.getElementById('aircraftSelect'); const consumptionInput = document.getElementById('consumptionKgPerS'); const tasInput = document.getElementById('tas'); const fuelInput = document.getElementById('fuelKg'); select.addEventListener('change', ()=>{ const idx = select.selectedIndex; const opt = select.options[idx]; if(opt.value === 'custom') return; const exampleFph = parseFloat(opt.getAttribute('data-fph')); const tasKt = parseFloat(opt.getAttribute('data-tas-kt')); if(!isNaN(exampleFph)) consumptionInput.value = (kgphToKgps(exampleFph)).toFixed(4); if(!isNaN(tasKt)) tasInput.value = (tasKt * 0.514444).toFixed(1); }); function formatTimeFromSeconds(sec){ if(!isFinite(sec) || sec<=0) return '0分'; const s = Math.floor(sec); const h = Math.floor(s/3600); const m = Math.floor((s%3600)/60); const ss = s%60; let out = ''; if(h>0) out += h + '時間 '; if(m>0) out += m + '分 '; out += ss + '秒'; return out; } document.getElementById('calcBtn').addEventListener('click', ()=>{ const fuelKg = parseFloat(fuelInput.value) || 0; const baseConsumption = parseFloat(consumptionInput.value) || 0; const windSpeedKt = parseFloat(document.getElementById('windSpeedKt').value) || 0; const windSpeed = ktToMs(windSpeedKt); const windDir = parseFloat(document.getElementById('windDir').value) || 0; const heading = parseFloat(document.getElementById('heading').value) || 0; const tas = parseFloat(tasInput.value) || 1; const sensitivity = 0.5; const rel = toRad(windDir - heading); const windComponent = windSpeed * Math.cos(rel); let adjustedConsumption = baseConsumption * (1 + sensitivity * (-windComponent / Math.max(tas,1))); if(adjustedConsumption < baseConsumption * 0.6) adjustedConsumption = baseConsumption * 0.6; if(adjustedConsumption < 1e-6) adjustedConsumption = baseConsumption; const seconds = adjustedConsumption > 0 ? fuelKg / adjustedConsumption : Infinity; const resultEl = document.getElementById('result'); resultEl.innerHTML = `推定飛行時間: ${formatTimeFromSeconds(seconds)}
(消費率: ${adjustedConsumption.toFixed(4)} kg/s, 風成分: ${(windComponent/0.514444).toFixed(1)} kt)`; }); document.getElementById('resetBtn').addEventListener('click', ()=>{ fuelInput.value = 2000; consumptionInput.value = 0.7; document.getElementById('windSpeedKt').value = 20; document.getElementById('windDir').value = 180; document.getElementById('heading').value = 0; tasInput.value = 230; select.selectedIndex = 0; document.getElementById('result').innerText = '—'; });