function calculateWattage(restingHeartRate, maximumHeartRate, heartRate, basePowerOutput) { function getZonePercentile(heartRate, restingHeartRate, maximumHeartRate) { const HRR = maximumHeartRate - restingHeartRate; const zonePercentage = ((heartRate - restingHeartRate) / HRR) * 100; return Math.round(zonePercentage * 100) / 100; } function getHrrRange(zone) { if (zone <= 65) return [0, 65]; else if (zone <= 70) return [65, 70]; else if (zone <= 80) return [70, 80]; else if (zone <= 85) return [80, 85]; else if (zone <= 95) return [85, 95]; else return [95, 100]; } function getPowerRange(zone) { if (zone <= 65) return [0, 45]; else if (zone <= 70) return [45, 60]; else if (zone <= 80) return [60, 70]; else if (zone <= 85) return [70, 80]; else if (zone <= 95) return [80, 105]; else return [105, 115]; } const zonePercentage = getZonePercentile(heartRate, restingHeartRate, maximumHeartRate); console.log("Zone:", zonePercentage); const minPower = getPowerRange(zonePercentage)[0]; const maxPower = getPowerRange(zonePercentage)[1]; const [minHrr, maxHrr] = getHrrRange(zonePercentage); console.log("Min HRR:", minHrr); console.log("Max HRR:", maxHrr); const powerRange = maxPower - minPower; console.log("Power range:", powerRange); const hrrRange = maxHrr - minHrr; console.log("HRR range:", hrrRange); console.log("Zone minus min HRR:", zonePercentage - minHrr); const hrrPercentage = (zonePercentage - minHrr) / hrrRange; console.log("HRR percentage:", hrrPercentage); const powerPercentage = (minPower + hrrPercentage * powerRange) / 100; console.log("Power percentage:", powerPercentage); // Calculate predicted power const predictedPower = basePowerOutput / powerPercentage; return Math.round(predictedPower); } // Example usage const restingHeartRate = 58; const maximumHeartRate = 165; const heartRate = 132; const basePowerOutput = 110; const watts = calculateWattage(restingHeartRate, maximumHeartRate, heartRate, basePowerOutput); console.log(`Predicted power: ${watts} watts`);