updated AdvancedCalculator.js

This commit is contained in:
Jonas 2025-03-20 14:04:02 +01:00
parent 157955011e
commit dffead1a2b

View File

@ -300,7 +300,8 @@ const AdvancedCalculator = () => {
const convertUnit = () => { const convertUnit = () => {
try { try {
const result = math.evaluate(`${unitConversion.fromValue} ${unitConversion.fromUnit} to ${unitConversion.toUnit}`); const result = math.evaluate(`${unitConversion.fromValue} ${unitConversion.fromUnit} to ${unitConversion.toUnit}`);
return result.toString(); // Return just the numeric value, without units
return result.toString().replace(unitConversion.toUnit, '').trim();
} catch (error) { } catch (error) {
return 'Error: Invalid conversion'; return 'Error: Invalid conversion';
} }
@ -397,23 +398,23 @@ const AdvancedCalculator = () => {
impactTime = Math.max(t1, t2); impactTime = Math.max(t1, t2);
} }
// Add points to ensure smooth landing // Make sure we have the right data array to work with
const impactX = vx * impactTime; newData = simulationData.slice(0, -1); // Remove the last point (which is below ground)
// Add a data point just before landing // Add a point just before landing for a smooth curve
if (impactTime > 0.1) { if (impactTime > 0.1) {
const preImpactTime = impactTime - 0.05; const preImpactTime = impactTime - 0.05;
const preImpactX = vx * preImpactTime; const preImpactX = vx * preImpactTime;
const preImpactY = height + vy * preImpactTime - 0.5 * gravity * preImpactTime * preImpactTime; const preImpactY = height + vy * preImpactTime - 0.5 * gravity * preImpactTime * preImpactTime;
newData = [...simulationData, { x: preImpactX, y: preImpactY }];
if (preImpactY > 0) {
newData.push({ x: preImpactX, y: preImpactY });
}
} }
// Add exact landing point and range point // Add the exact landing point (y = 0)
newData = [...newData || simulationData, const impactX = vx * impactTime;
{ x: impactX, y: 0 }, newData.push({ x: impactX, y: 0 });
// Add the theoretical endpoint to match the calculated range
{ x: theoreticalRange, y: 0 }
];
} else { } else {
newData = [...simulationData]; newData = [...simulationData];
} }
@ -1068,22 +1069,150 @@ const AdvancedCalculator = () => {
<option value="nmi">Nautical Miles (nmi)</option> <option value="nmi">Nautical Miles (nmi)</option>
</> </>
)} )}
{/* Other categories as in your original code */} {unitConversion.category === 'volume' && (
{/* I've truncated these for brevity but you should include all original options */}
{unitConversion.category === 'mass' && (
<> <>
<option value="kg">Kilograms (kg)</option> <option value="m3">Cubic Meters ()</option>
<option value="g">Grams (g)</option> <option value="L">Liters (L)</option>
<option value="mg">Milligrams (mg)</option> <option value="mL">Milliliters (mL)</option>
<option value="lb">Pounds (lb)</option> <option value="cm3">Cubic Centimeters (cm³)</option>
<option value="oz">Ounces (oz)</option> <option value="mm3">Cubic Millimeters (mm³)</option>
<option value="ton">Metric Tons (t)</option> <option value="gal">US Gallons (gal)</option>
<option value="st">Stone (st)</option> <option value="qt">US Quarts (qt)</option>
<option value="lbt">Long Ton (lbt)</option> <option value="pt">US Pints (pt)</option>
<option value="sht">Short Ton (sht)</option> <option value="cup">US Cups (cup)</option>
<option value="fl-oz">US Fluid Ounces (fl oz)</option>
<option value="tbsp">Tablespoons (tbsp)</option>
<option value="tsp">Teaspoons (tsp)</option>
<option value="in3">Cubic Inches (in³)</option>
<option value="ft3">Cubic Feet (ft³)</option>
<option value="impgal">Imperial Gallons (imp gal)</option>
</>
)}
{unitConversion.category === 'temperature' && (
<>
<option value="degC">Celsius (°C)</option>
<option value="degF">Fahrenheit (°F)</option>
<option value="K">Kelvin (K)</option>
<option value="degR">Rankine (°R)</option>
</>
)}
{unitConversion.category === 'area' && (
<>
<option value="m2">Square Meters ()</option>
<option value="km2">Square Kilometers (km²)</option>
<option value="cm2">Square Centimeters (cm²)</option>
<option value="mm2">Square Millimeters (mm²)</option>
<option value="ha">Hectares (ha)</option>
<option value="acre">Acres (ac)</option>
<option value="ft2">Square Feet (ft²)</option>
<option value="in2">Square Inches (in²)</option>
<option value="yd2">Square Yards (yd²)</option>
<option value="mi2">Square Miles (mi²)</option>
</>
)}
{unitConversion.category === 'time' && (
<>
<option value="s">Seconds (s)</option>
<option value="ms">Milliseconds (ms)</option>
<option value="us">Microseconds (μs)</option>
<option value="ns">Nanoseconds (ns)</option>
<option value="min">Minutes (min)</option>
<option value="h">Hours (h)</option>
<option value="d">Days (d)</option>
<option value="week">Weeks (wk)</option>
<option value="month">Months (mo)</option>
<option value="year">Years (yr)</option>
<option value="decade">Decades</option>
<option value="century">Centuries</option>
</>
)}
{unitConversion.category === 'speed' && (
<>
<option value="m/s">Meters per Second (m/s)</option>
<option value="km/h">Kilometers per Hour (km/h)</option>
<option value="km/s">Kilometers per Second (km/s)</option>
<option value="mph">Miles per Hour (mph)</option>
<option value="ft/s">Feet per Second (ft/s)</option>
<option value="knot">Knots (kn)</option>
<option value="mach">Mach (at sea level)</option>
<option value="c">Speed of Light (c)</option>
</>
)}
{unitConversion.category === 'pressure' && (
<>
<option value="Pa">Pascal (Pa)</option>
<option value="hPa">Hectopascal (hPa)</option>
<option value="kPa">Kilopascal (kPa)</option>
<option value="MPa">Megapascal (MPa)</option>
<option value="bar">Bar (bar)</option>
<option value="mbar">Millibar (mbar)</option>
<option value="atm">Atmosphere (atm)</option>
<option value="mmHg">Millimeters of Mercury (mmHg)</option>
<option value="inHg">Inches of Mercury (inHg)</option>
<option value="psi">Pounds per Square Inch (psi)</option>
<option value="psf">Pounds per Square Foot (psf)</option>
<option value="torr">Torr</option>
</>
)}
{unitConversion.category === 'energy' && (
<>
<option value="J">Joules (J)</option>
<option value="kJ">Kilojoules (kJ)</option>
<option value="MJ">Megajoules (MJ)</option>
<option value="cal">Calories (cal)</option>
<option value="kcal">Kilocalories (kcal)</option>
<option value="Wh">Watt-hours (Wh)</option>
<option value="kWh">Kilowatt-hours (kWh)</option>
<option value="MWh">Megawatt-hours (MWh)</option>
<option value="eV">Electron Volts (eV)</option>
<option value="BTU">British Thermal Units (BTU)</option>
<option value="therm">Therms</option>
<option value="ft-lb">Foot-pounds (ft-lb)</option>
</>
)}
{unitConversion.category === 'power' && (
<>
<option value="W">Watts (W)</option>
<option value="mW">Milliwatts (mW)</option>
<option value="kW">Kilowatts (kW)</option>
<option value="MW">Megawatts (MW)</option>
<option value="GW">Gigawatts (GW)</option>
<option value="hp">Horsepower (hp)</option>
<option value="BTU/h">BTU per Hour (BTU/h)</option>
<option value="ft-lb/s">Foot-pounds per second (ft-lb/s)</option>
</>
)}
{unitConversion.category === 'angle' && (
<>
<option value="rad">Radians (rad)</option>
<option value="deg">Degrees (°)</option>
<option value="grad">Gradians (grad)</option>
<option value="arcmin">Arc Minutes (')</option>
<option value="arcsec">Arc Seconds (")</option>
<option value="cycle">Cycles</option>
<option value="rev">Revolutions</option>
<option value="quad">Quadrants</option>
<option value="sr">Steradians (sr)</option>
</>
)}
{unitConversion.category === 'digital' && (
<>
<option value="b">Bits (b)</option>
<option value="B">Bytes (B)</option>
<option value="kB">Kilobytes (kB)</option>
<option value="MB">Megabytes (MB)</option>
<option value="GB">Gigabytes (GB)</option>
<option value="TB">Terabytes (TB)</option>
<option value="PB">Petabytes (PB)</option>
<option value="EB">Exabytes (EB)</option>
<option value="KiB">Kibibytes (KiB)</option>
<option value="MiB">Mebibytes (MiB)</option>
<option value="GiB">Gibibytes (GiB)</option>
<option value="TiB">Tebibytes (TiB)</option>
<option value="PiB">Pebibytes (PiB)</option>
<option value="EiB">Exbibytes (EiB)</option>
</> </>
)} )}
{/* Include the rest of your category options here */}
</select> </select>
</div> </div>
@ -1108,20 +1237,150 @@ const AdvancedCalculator = () => {
)} )}
{/* Other categories as in your original code */} {/* Other categories as in your original code */}
{/* I've truncated these for brevity but you should include all original options */} {/* I've truncated these for brevity but you should include all original options */}
{unitConversion.category === 'mass' && ( {unitConversion.category === 'volume' && (
<> <>
<option value="kg">Kilograms (kg)</option> <option value="m3">Cubic Meters ()</option>
<option value="g">Grams (g)</option> <option value="L">Liters (L)</option>
<option value="mg">Milligrams (mg)</option> <option value="mL">Milliliters (mL)</option>
<option value="lb">Pounds (lb)</option> <option value="cm3">Cubic Centimeters (cm³)</option>
<option value="oz">Ounces (oz)</option> <option value="mm3">Cubic Millimeters (mm³)</option>
<option value="ton">Metric Tons (t)</option> <option value="gal">US Gallons (gal)</option>
<option value="st">Stone (st)</option> <option value="qt">US Quarts (qt)</option>
<option value="lbt">Long Ton (lbt)</option> <option value="pt">US Pints (pt)</option>
<option value="sht">Short Ton (sht)</option> <option value="cup">US Cups (cup)</option>
<option value="fl-oz">US Fluid Ounces (fl oz)</option>
<option value="tbsp">Tablespoons (tbsp)</option>
<option value="tsp">Teaspoons (tsp)</option>
<option value="in3">Cubic Inches (in³)</option>
<option value="ft3">Cubic Feet (ft³)</option>
<option value="impgal">Imperial Gallons (imp gal)</option>
</>
)}
{unitConversion.category === 'temperature' && (
<>
<option value="degC">Celsius (°C)</option>
<option value="degF">Fahrenheit (°F)</option>
<option value="K">Kelvin (K)</option>
<option value="degR">Rankine (°R)</option>
</>
)}
{unitConversion.category === 'area' && (
<>
<option value="m2">Square Meters ()</option>
<option value="km2">Square Kilometers (km²)</option>
<option value="cm2">Square Centimeters (cm²)</option>
<option value="mm2">Square Millimeters (mm²)</option>
<option value="ha">Hectares (ha)</option>
<option value="acre">Acres (ac)</option>
<option value="ft2">Square Feet (ft²)</option>
<option value="in2">Square Inches (in²)</option>
<option value="yd2">Square Yards (yd²)</option>
<option value="mi2">Square Miles (mi²)</option>
</>
)}
{unitConversion.category === 'time' && (
<>
<option value="s">Seconds (s)</option>
<option value="ms">Milliseconds (ms)</option>
<option value="us">Microseconds (μs)</option>
<option value="ns">Nanoseconds (ns)</option>
<option value="min">Minutes (min)</option>
<option value="h">Hours (h)</option>
<option value="d">Days (d)</option>
<option value="week">Weeks (wk)</option>
<option value="month">Months (mo)</option>
<option value="year">Years (yr)</option>
<option value="decade">Decades</option>
<option value="century">Centuries</option>
</>
)}
{unitConversion.category === 'speed' && (
<>
<option value="m/s">Meters per Second (m/s)</option>
<option value="km/h">Kilometers per Hour (km/h)</option>
<option value="km/s">Kilometers per Second (km/s)</option>
<option value="mph">Miles per Hour (mph)</option>
<option value="ft/s">Feet per Second (ft/s)</option>
<option value="knot">Knots (kn)</option>
<option value="mach">Mach (at sea level)</option>
<option value="c">Speed of Light (c)</option>
</>
)}
{unitConversion.category === 'pressure' && (
<>
<option value="Pa">Pascal (Pa)</option>
<option value="hPa">Hectopascal (hPa)</option>
<option value="kPa">Kilopascal (kPa)</option>
<option value="MPa">Megapascal (MPa)</option>
<option value="bar">Bar (bar)</option>
<option value="mbar">Millibar (mbar)</option>
<option value="atm">Atmosphere (atm)</option>
<option value="mmHg">Millimeters of Mercury (mmHg)</option>
<option value="inHg">Inches of Mercury (inHg)</option>
<option value="psi">Pounds per Square Inch (psi)</option>
<option value="psf">Pounds per Square Foot (psf)</option>
<option value="torr">Torr</option>
</>
)}
{unitConversion.category === 'energy' && (
<>
<option value="J">Joules (J)</option>
<option value="kJ">Kilojoules (kJ)</option>
<option value="MJ">Megajoules (MJ)</option>
<option value="cal">Calories (cal)</option>
<option value="kcal">Kilocalories (kcal)</option>
<option value="Wh">Watt-hours (Wh)</option>
<option value="kWh">Kilowatt-hours (kWh)</option>
<option value="MWh">Megawatt-hours (MWh)</option>
<option value="eV">Electron Volts (eV)</option>
<option value="BTU">British Thermal Units (BTU)</option>
<option value="therm">Therms</option>
<option value="ft-lb">Foot-pounds (ft-lb)</option>
</>
)}
{unitConversion.category === 'power' && (
<>
<option value="W">Watts (W)</option>
<option value="mW">Milliwatts (mW)</option>
<option value="kW">Kilowatts (kW)</option>
<option value="MW">Megawatts (MW)</option>
<option value="GW">Gigawatts (GW)</option>
<option value="hp">Horsepower (hp)</option>
<option value="BTU/h">BTU per Hour (BTU/h)</option>
<option value="ft-lb/s">Foot-pounds per second (ft-lb/s)</option>
</>
)}
{unitConversion.category === 'angle' && (
<>
<option value="rad">Radians (rad)</option>
<option value="deg">Degrees (°)</option>
<option value="grad">Gradians (grad)</option>
<option value="arcmin">Arc Minutes (')</option>
<option value="arcsec">Arc Seconds (")</option>
<option value="cycle">Cycles</option>
<option value="rev">Revolutions</option>
<option value="quad">Quadrants</option>
<option value="sr">Steradians (sr)</option>
</>
)}
{unitConversion.category === 'digital' && (
<>
<option value="b">Bits (b)</option>
<option value="B">Bytes (B)</option>
<option value="kB">Kilobytes (kB)</option>
<option value="MB">Megabytes (MB)</option>
<option value="GB">Gigabytes (GB)</option>
<option value="TB">Terabytes (TB)</option>
<option value="PB">Petabytes (PB)</option>
<option value="EB">Exabytes (EB)</option>
<option value="KiB">Kibibytes (KiB)</option>
<option value="MiB">Mebibytes (MiB)</option>
<option value="GiB">Gibibytes (GiB)</option>
<option value="TiB">Tebibytes (TiB)</option>
<option value="PiB">Pebibytes (PiB)</option>
<option value="EiB">Exbibytes (EiB)</option>
</> </>
)} )}
{/* Include the rest of your category options here */}
</select> </select>
</div> </div>
</div> </div>