function RelativeSpeedCalculator() { const [direction, setDirection] = useState('opposite'); const [speed1, setSpeed1] = useState(''); const [speed2, setSpeed2] = useState(''); const [distance, setDistance] = useState(''); const [result, setResult] = useState(null); const calculate = () => { const s1 = parseFloat(speed1); const s2 = parseFloat(speed2); const d = parseFloat(distance); let calculated = {}; if (direction === 'opposite') { const relativeSpeed = s1 + s2; const timeToMeet = d / relativeSpeed; calculated = { relativeSpeed: relativeSpeed.toFixed(2), timeToMeet: timeToMeet.toFixed(2), timeInMinutes: (timeToMeet * 60).toFixed(2), formula: 'Relative Speed = Speed₁ + Speed₂ (opposite direction)', calculation: `Relative Speed = ${s1} + ${s2} = ${relativeSpeed} km/h\nTime to meet = ${d} / ${relativeSpeed} = ${timeToMeet.toFixed(2)} hours`, type: 'Speed of Approach' }; } else { const relativeSpeed = Math.abs(s1 - s2); const timeToMeet = d / relativeSpeed; calculated = { relativeSpeed: relativeSpeed.toFixed(2), timeToMeet: timeToMeet.toFixed(2), timeInMinutes: (timeToMeet * 60).toFixed(2), formula: 'Relative Speed = |Speed₁ - Speed₂| (same direction)', calculation: `Relative Speed = |${s1} - ${s2}| = ${relativeSpeed} km/h\nTime to meet = ${d} / ${relativeSpeed} = ${timeToMeet.toFixed(2)} hours`, type: 'Speed of Separation' }; } setResult(calculated); }; return (
Concept:
• Opposite Direction: Relative Speed = S₁ + S₂ (Speed of Approach)
• Same Direction: Relative Speed = |S₁ - S₂| (Speed of Separation)
setSpeed1(e.target.value)} placeholder="60" />
setSpeed2(e.target.value)} placeholder="40" />
setDistance(e.target.value)} placeholder="200" />
{result && (
Type: {result.type}
Formula: {result.formula}
Calculation:
{result.calculation}
Relative Speed: {result.relativeSpeed} km/h
Time to Meet: {result.timeToMeet} hours ({result.timeInMinutes} minutes)
)}
); } // Export to global registry window.RelativeSpeedCalculator = RelativeSpeedCalculator;