function AverageSpeedCalculator() { const [type, setType] = useState('equal_distance'); const [speed1, setSpeed1] = useState(''); const [speed2, setSpeed2] = useState(''); const [distance1, setDistance1] = useState(''); const [distance2, setDistance2] = useState(''); const [time1, setTime1] = useState(''); const [time2, setTime2] = useState(''); const [result, setResult] = useState(null); const calculate = () => { const s1 = parseFloat(speed1); const s2 = parseFloat(speed2); let calculated = {}; if (type === 'equal_distance') { // Harmonic mean for equal distances const avgSpeed = (2 * s1 * s2) / (s1 + s2); calculated = { avgSpeed: avgSpeed.toFixed(2), formula: 'Average Speed = 2 × S₁ × S₂ / (S₁ + S₂) [Harmonic Mean]', calculation: `Avg Speed = 2 × ${s1} × ${s2} / (${s1} + ${s2}) = ${avgSpeed.toFixed(2)} km/h`, note: 'Used when equal distances are covered at different speeds' }; } else if (type === 'different_distance') { const d1 = parseFloat(distance1); const d2 = parseFloat(distance2); const totalDist = d1 + d2; const totalTime = (d1 / s1) + (d2 / s2); const avgSpeed = totalDist / totalTime; calculated = { avgSpeed: avgSpeed.toFixed(2), totalDistance: totalDist, totalTime: totalTime.toFixed(2), formula: 'Average Speed = Total Distance / Total Time', calculation: `Total Distance = ${d1} + ${d2} = ${totalDist} km\nTotal Time = ${d1}/${s1} + ${d2}/${s2} = ${totalTime.toFixed(2)} hours\nAvg Speed = ${totalDist} / ${totalTime.toFixed(2)} = ${avgSpeed.toFixed(2)} km/h` }; } else { const t1 = parseFloat(time1); const t2 = parseFloat(time2); const totalDist = (s1 * t1) + (s2 * t2); const totalTime = t1 + t2; const avgSpeed = totalDist / totalTime; calculated = { avgSpeed: avgSpeed.toFixed(2), totalDistance: totalDist.toFixed(2), totalTime: totalTime, formula: 'Average Speed = Total Distance / Total Time', calculation: `Total Distance = (${s1} × ${t1}) + (${s2} × ${t2}) = ${totalDist.toFixed(2)} km\nTotal Time = ${t1} + ${t2} = ${totalTime} hours\nAvg Speed = ${totalDist.toFixed(2)} / ${totalTime} = ${avgSpeed.toFixed(2)} km/h` }; } setResult(calculated); }; return (
setSpeed1(e.target.value)} placeholder="60" />
setSpeed2(e.target.value)} placeholder="40" />
{type === 'different_distance' && ( <>
setDistance1(e.target.value)} placeholder="120" />
setDistance2(e.target.value)} placeholder="80" />
)} {type === 'different_time' && ( <>
setTime1(e.target.value)} placeholder="2" />
setTime2(e.target.value)} placeholder="3" />
)}
{result && (
Formula: {result.formula}
Calculation:
{result.calculation}
{result.note && (
Note: {result.note}
)}
Average Speed: {result.avgSpeed} km/h
{result.totalDistance &&
Total Distance: {result.totalDistance} km
} {result.totalTime &&
Total Time: {result.totalTime} hours
}
)}
); } // Export to global registry window.AverageSpeedCalculator = AverageSpeedCalculator;