Τύποι Ποδηλατικής Ισχύος

Μαθηματικά Θεμέλια των Δεικτών του Bike Analytics

Οδηγός Υλοποίησης

Αυτή η σελίδα παρέχει τύπους έτοιμους για χρήση και μεθόδους υπολογισμού βήμα προς βήμα για όλους τους δείκτες του Bike Analytics. Χρησιμοποιήστε τους για προσαρμοσμένες υλοποιήσεις, επαλήθευση ή βαθύτερη κατανόηση της προπόνησης βάσει ισχύος.

⚠️ Σημειώσεις Υλοποίησης

  • Όλες οι τιμές ισχύος σε watts (W), ο χρόνος σε δευτερόλεπτα εκτός αν ορίζεται διαφορετικά.
  • Το FTP και η CP είναι κατώφλια ειδικά για κάθε άτομο—δεν υπάρχουν καθολικές τιμές.
  • Να επικυρώνετε πάντα τις εισόδους για λογικά εύρη (τυπικά 0-2000W).
  • Χειριστείτε τις οριακές περιπτώσεις (διαίρεση με το μηδέν, αρνητική ισχύς).
  • Τα δεδομένα ισχύος απαιτούν διαστήματα καταγραφής 1 δευτερολέπτου για ακρίβεια.

Βασικοί Δείκτες Απόδοσης

1. Βαθμολογία Προπονητικού Σρες (TSS)

Τύπος:

TSS = (duration_seconds × NP × IF) / (FTP × 3600) × 100
όπου IF = NP / FTP

Παράδειγμα Υπολογισμού:

Σενάριο: Διαδρομή 2 ωρών, NP = 235W, FTP = 250W

  1. Υπολογισμός IF: IF = 235 / 250 = 0,94
  2. Διάρκεια σε δευτερόλεπτα: 2 ώρες × 3600 = 7200 δευτερόλεπτα
  3. TSS = (7200 × 235 × 0,94) / (250 × 3600) × 100
  4. TSS = 1.590.720 / 900.000 × 100 = 176,7 TSS

Ερμηνεία: Σκληρή προπονητική διαδρομή (>150 TSS), αναμονή 2-3 ημερών για αποκατάσταση.

Υλοποίηση σε JavaScript:

function calculateTSS(durationSeconds, normalizedPower, ftp) {
  const intensityFactor = normalizedPower / ftp;
  const tss = (durationSeconds * normalizedPower * intensityFactor) / (ftp * 3600) * 100;
  return Math.round(tss);
}

// Παράδειγμα χρήσης:
const tss = calculateTSS(7200, 235, 250);
// Επιστρέφει: 177

2. Κανονικοποιημένη Ισχύς (Normalized Power - NP)

Αλγόριθμος (κυλιόμενος μέσος όρος 30 δευτερολέπτων):

1. Υπολογίστε τον κυλιόμενο μέσο όρο ισχύος 30 δευτερολέπτων για ολόκληρη τη διαδρομή.
2. Υψώστε κάθε τιμή 30 δευτερολέπτων στην 4η δύναμη.
3. Πάρτε τον μέσο όρο όλων αυτών των τιμών ^4.
4. Πάρτε την 4η ρίζα αυτού του μέσου όρου.
NP = ⁴√(μέσος όρος των [30s_avg^4])

Γιατί η 4η δύναμη;

Η τεταρτοβάθμια (4η δύναμη) σχέση αντικατοπτρίζει το μη γραμμικό φυσιολογικό κόστος των μεταβλητών προσπαθειών. Μια διαδρομή με εκρήξεις και ανακάμψεις κοστίζει περισσότερη ενέργεια από μια σταθερή ισχύ στον ίδιο μέσο όρο.

Παράδειγμα:

  • Σταθερή διαδρομή: 200W για 1 ώρα → NP = 200W, Μέσος Όρος = 200W
  • Μεταβλητή διαδρομή: Εναλλαγή 300W/100W → Μέσος Όρος = 200W, NP = 225W

Ίδιος μέσος όρος ισχύος, αλλά η μεταβλητή διαδρομή έχει 12% υψηλότερη NP λόγω του φυσιολογικού κόστους των εκρήξεων.

Υλοποίηση σε JavaScript:

function calculateNormalizedPower(powerData) {
  // το powerData είναι ένας πίνακας τιμών ισχύος ανά 1 δευτερόλεπτο

  // Βήμα 1: Υπολογισμός κυλιόμενων μέσων όρων 30 δευτερολέπτων
  const rollingAvgs = [];
  for (let i = 29; i < powerData.length; i++) {
    const window = powerData.slice(i - 29, i + 1);
    const avg = window.reduce((sum, p) => sum + p, 0) / 30;
    rollingAvgs.push(avg);
  }

  // Βήμα 2: Ύψωση στην 4η δύναμη
  const powered = rollingAvgs.map(p => Math.pow(p, 4));

  // Βήμα 3: Μέσος όρος των 4ων δυνάμεων
  const avgPowered = powered.reduce((sum, p) => sum + p, 0) / powered.length;

  // Βήμα 4: Λήψη της 4ης ρίζας
  const np = Math.pow(avgPowered, 0.25);

  return Math.round(np);
}

// Παράδειγμα χρήσης:
const powerData = [/* πίνακας ισχύος 1 δευτερολέπτου */];
const np = calculateNormalizedPower(powerData);
// Επιστρέφει: NP σε watts

3. Συντελεστής Έντασης (Intensity Factor - IF)

Τύπος:

IF = NP / FTP

Εύρη Ερμηνείας:

Εύρος IF Επίπεδο Προσπάθειας Παράδειγμα Προπόνησης
< 0,75 Αποκατάσταση / Εύκολο Διαδρομή ενεργητικής αποκατάστασης, Ζώνη 1-2
0,75 - 0,85 Αντοχή Μεγάλη σταθερή διαδρομή, αερόβια βάση
0,85 - 0,95 Tempo Προπόνηση Sweet spot, tempo intervals
0,95 - 1,05 Κατώφλι (Threshold) Intervals FTP, προσπάθεια ατομικής χρονομέτρησης
1,05 - 1,15 VO₂max Intervals 5 λεπτών, αγώνας κριτήριουμ
> 1,15 Αναερόβιο Σύντομα sprints, επιθέσεις, εκρήξεις MTB

Παράδειγμα Υπολογισμού:

Σενάριο: NP = 235W, FTP = 250W

IF = 235 / 250 = 0,94

Ερμηνεία: Υψηλό tempo / προσπάθεια υπό το κατώφλι, διατηρήσιμη για 2-3 ώρες.

function calculateIF(normalizedPower, ftp) {
  return (normalizedPower / ftp).toFixed(2);
}

// Παράδειγμα:
const if_value = calculateIF(235, 250);
// Επιστρέφει: 0.94

4. Δείκτης Μεταβλητότητας (Variability Index - VI)

Τύπος:

VI = NP / Μέση Ισχύς

Ερμηνεία ανά Άθλημα:

Άθλημα Τυπικός VI Σημασία
Χρονόμετρο Δρόμου / Σταθερή Προσπάθεια 1,00 - 1,05 Πολύ σταθερή ισχύς, βέλτιστος ρυθμός
Αγώνες Δρόμου 1,05 - 1,10 Κάποιες εκρήξεις, γενικά σταθερό
Κριτήριουμ (Criterium) 1,10 - 1,20 Συχνές επιταχύνσεις και επιθέσεις
Mountain Bike XC 1,15 - 1,30+ Πολύ μεταβλητό, συνεχείς εκρήξεις

Παράδειγμα Υπολογισμού:

Αγώνας Δρόμου: NP = 240W, Μέση Ισχύς = 230W

VI = 240 / 230 = 1,04 (σταθερός ρυθμός)

Αγώνας MTB: NP = 285W, Μέση Ισχύς = 235W

VI = 285 / 235 = 1,21 (πολύ μεταβλητό, εκρηκτικές προσπάθειες)

function calculateVI(normalizedPower, averagePower) {
  return (normalizedPower / averagePower).toFixed(2);
}

// Παράδειγμα:
const vi_road = calculateVI(240, 230);  // Επιστρέφει: 1.04
const vi_mtb = calculateVI(285, 235);   // Επιστρέφει: 1.21

Κρίσιμη Ισχύς & W' (Αναερόβια Ικανότητα)

5. Κρίσιμη Ισχύς (CP) - Γραμμικό Μοντέλο

Τύπος:

Χρόνος = W' / (Ισχύς - CP)
Αναδιάταξη: Ισχύς × Χρόνος = CP × Χρόνος + W'

Υπολογισμός από Πολλαπλές Προσπάθειες:

Απαιτούνται 2-4 μέγιστες προσπάθειες σε διαφορετικές διάρκειες (π.χ. 3, 5, 12, 20 λεπτά).

Παράδειγμα Δεδομένων:

Διάρκεια Ισχύς (W) Συνολικό Έργο (kJ)
3 λεπτά (180s) 400W 72 kJ
5 λεπτά (300s) 365W 109,5 kJ
12 λεπτά (720s) 310W 223,2 kJ
20 λεπτά (1200s) 285W 342 kJ

Χρησιμοποιώντας γραμμική παλινδρόμηση (Έργο = CP × Χρόνος + W'):

  • CP = 270W (κλίση της γραμμής παλινδρόμησης)
  • W' = 18,5 kJ (σημείο τομής με τον άξονα y)

Υλοποίηση σε JavaScript:

function calculateCP_Linear(efforts) {
  // efforts = [{duration: seconds, power: watts}, ...]

  const times = efforts.map(e => e.duration);
  const work = efforts.map(e => e.power * e.duration / 1000); // kJ

  // Γραμμική παλινδρόμηση: work = CP * time + W'
  const n = efforts.length;
  const sumT = times.reduce((a, b) => a + b, 0);
  const sumW = work.reduce((a, b) => a + b, 0);
  const sumTW = times.reduce((sum, t, i) => sum + t * work[i], 0);
  const sumTT = times.reduce((sum, t) => sum + t * t, 0);

  const CP = (n * sumTW - sumT * sumW) / (n * sumTT - sumT * sumT);
  const Wprime = (sumW - CP * sumT) / n;

  return {
    CP: Math.round(CP * 10) / 10,      // watts
    Wprime: Math.round(Wprime * 10) / 10  // kJ
  };
}

// Παράδειγμα χρήσης:
const efforts = [
  {duration: 180, power: 400},
  {duration: 300, power: 365},
  {duration: 720, power: 310},
  {duration: 1200, power: 285}
];

const result = calculateCP_Linear(efforts);
// Επιστρέφει: { CP: 270.0, Wprime: 18.5 }

6. Ισορροπία W' (W' Balance) - Μοντέλο Διαφορικής Εξίσωσης

Τύποι:

Εξάντληση (όταν P > CP):
W'exp(t) = ∫(P(t) - CP) dt
Ανάκαμψη (όταν P < CP):
W'rec(t) = W' × (1 - e^(-t/τ))
όπου τ = 546 × e^(-0,01 × ΔCP) + 316
και ΔCP = (CP - P(t))

Παράδειγμα από τον Πραγματικό Κόσμο:

Στοιχεία ποδηλάτη: CP = 270W, W' = 18,5 kJ

Σενάριο 1 - Σκληρή Επίθεση:

  • Ο αναβάτης εκρήγνυται στα 400W για 30 δευτερόλεπτα.
  • Εξάντληση W': (400 - 270) × 30 = 3.900 J = 3,9 kJ
  • W'bal που απομένει: 18,5 - 3,9 = 14,6 kJ

Σενάριο 2 - Ανάκαμψη:

  • Μετά την επίθεση, πέφτει στα 200W (70W κάτω από την CP) για 2 λεπτά.
  • ΔCP = 270 - 200 = 70W
  • τ = 546 × e^(-0,01 × 70) + 316 = 588 δευτερόλεπτα
  • Ανάκαμψη σε 120s: 18,5 × (1 - e^(-120/588)) = 3,5 kJ ανακτήθηκαν
  • Νέα W'bal: 14,6 + 3,5 = 18,1 kJ

Υλοποίηση σε JavaScript:

function calculateWbalance(powerData, CP, Wprime) {
  // powerData = πίνακας {time: seconds, power: watts}
  let wbal = Wprime * 1000; // Μετατροπή σε joules
  const wbalHistory = [];

  for (let i = 1; i < powerData.length; i++) {
    const dt = powerData[i].time - powerData[i-1].time;
    const power = powerData[i].power;

    if (power > CP) {
      // Εξάντληση πάνω από την CP
      const expenditure = (power - CP) * dt;
      wbal -= expenditure;
    } else {
      // Ανάκαμψη κάτω από την CP
      const deltaCP = CP - power;
      const tau = 546 * Math.exp(-0.01 * deltaCP) + 316;
      const recovery = (Wprime * 1000 - wbal) * (1 - Math.exp(-dt / tau));
      wbal += recovery;
    }

    // Διασφάλιση ότι το W'bal δεν υπερβαίνει το μέγιστο ούτε γίνεται αρνητικό
    wbal = Math.max(0, Math.min(wbal, Wprime * 1000));

    wbalHistory.push({
      time: powerData[i].time,
      wbal: wbal / 1000, // kJ
      percent: (wbal / (Wprime * 1000)) * 100
    });
  }

  return wbalHistory;
}

// Παράδειγμα χρήσης:
const powerData = [
  {time: 0, power: 200},
  {time: 1, power: 210},
  // ... υπόλοιπα δεδομένα διαδρομής
];

const wbalHistory = calculateWbalance(powerData, 270, 18.5);
// Επιστρέφει πίνακα τιμών W'bal συναρτήσει του χρόνου

Διάγραμμα Διαχείρισης Απόδοσης (Performance Management Chart - PMC)

7. Υπολογισμοί CTL, ATL, TSB

Τύποι (Εκθετικά Σταθμισμένοι Κινητοί Μέσοι Όροι):

CTL_today = CTL_yesterday + (TSS_today - CTL_yesterday) / 42
ATL_today = ATL_yesterday + (TSS_today - ATL_yesterday) / 7
TSB_today = CTL_yesterday - ATL_yesterday

Ορισμοί Δεικτών:

  • CTL (Χρόνιο Προπονητικό Φορτίο): Εκθετικά σταθμισμένος μέσος όρος 42 ημερών - αντιπροσωπεύει τη φυσική κατάσταση (fitness).
  • ATL (Οξύ Προπονητικό Φορτίο): Εκθετικά σταθμισμένος μέσος όρος 7 ημερών - αντιπροσωπεύει την κόπωση (fatigue).
  • TSB (Ισορροπία Προπονητικού Σρες): Φόρμα = Φυσική Κατάσταση - Κόπωση.

Παράδειγμα Υπολογισμού (Προπονητικό Block 7 Ημερών):

Ημέρα TSS CTL ATL TSB Κατάσταση
Δευ 100 75,0 80,0 -5,0 Προπόνηση
Τρι 50 74,4 75,7 -1,3 Αποκατάσταση
Τετ 120 75,5 82,0 -6,5 Σκληρή Προπόνηση
Πεμ 0 73,7 70,3 +3,4 Ημέρα Ανάπαυσης
Παρ 80 73,8 71,7 +2,1 Μέτρια
Σαβ 150 75,6 82,9 -7,3 Μεγάλη Διαδρομή
Κυρ 40 74,8 76,8 -2,0 Αποκατάσταση

Ερμηνεία TSB:

Εύρος TSB Κατάσταση Ενέργεια
< -30 Υψηλός Κίνδυνος Προειδοποίηση υπερπροπόνησης - μείωση φορτίου.
-30 έως -10 Σκληρή Προπόνηση Χτίσιμο φυσικής κατάστασης, παρακολούθηση αποκατάστασης.
-10 έως +5 Βέλτιστη Κανονική ζώνη προπόνησης.
+5 έως +15 Έτοιμος για Αγώνα Κορύφωση φόρμας - αγώνας αυτό το Σαββατοκύριακο.
> +25 Αποπροπόνηση Απώλεια φυσικής κατάστασης - αύξηση φορτίου.

Υλοποίηση σε JavaScript:

function calculatePMC(workouts) {
  // workouts = [{date: "YYYY-MM-DD", tss: number}, ...]
  let ctl = 0, atl = 0;
  const results = [];

  workouts.forEach(workout => {
    // Ενημέρωση CTL (σταθερά χρόνου 42 ημερών)
    ctl = ctl + (workout.tss - ctl) / 42;

    // Ενημέρωση ATL (σταθερά χρόνου 7 ημερών)
    atl = atl + (workout.tss - atl) / 7;

    // Υπολογισμός TSB (χρησιμοποιώντας τις τρέχουσες τιμές για απλότητα εδώ)
    const tsb = ctl - atl;

    results.push({
      date: workout.date,
      tss: workout.tss,
      ctl: Math.round(ctl * 10) / 10,
      atl: Math.round(atl * 10) / 10,
      tsb: Math.round(tsb * 10) / 10,
      status: getTSBStatus(tsb)
    });
  });

  return results;
}

function getTSBStatus(tsb) {
  if (tsb < -30) return "High Risk";
  if (tsb < -10) return "Training Hard";
  if (tsb < 5) return "Optimal";
  if (tsb < 15) return "Race Ready";
  return "Detraining";
}

// Παράδειγμα χρήσης:
const workouts = [
  {date: "2025-01-01", tss: 100},
  {date: "2025-01-02", tss: 50},
  {date: "2025-01-03", tss: 120},
  // ... περισσότερες προπονήσεις
];

const pmc = calculatePMC(workouts);
// Επιστρέφει πίνακα με CTL, ATL, TSB για κάθε ημέρα

Σχέση Ισχύος-Βάρους & Δείκτες Αναρρίχησης

8. Σχέση Ισχύος-Βάρους (Power-to-Weight Ratio)

Τύπος:

W/kg = Ισχύς (watts) / Σωματική Μάζα (kg)

Ορόσημα FTP W/kg:

Επίπεδο W/kg Άνδρες W/kg Γυναίκες Κατηγορία
Ερασιτεχνικό 2,5 - 3,5 2,0 - 3,0 Ποδηλάτης fitness
Ανταγωνιστικό 3,5 - 4,5 3,0 - 4,0 Cat 3-4, ερασιτέχνης αθλητής
Προχωρημένο 4,5 - 5,5 4,0 - 5,0 Cat 1-2, ισχυρός ερασιτέχνης
Elite Ερασιτέχνης 5,5 - 6,0 5,0 - 5,5 Εθνικό επίπεδο
Επαγγελματικό 6,0 - 7,0+ 5,5 - 6,5+ World Tour, Grand Tour GC

Παράδειγμα Υπολογισμού:

Σενάριο: Ποδηλάτης με FTP = 275W, σωματική μάζα = 70kg

W/kg = 275 / 70 = 3,93 W/kg

Ερμηνεία: Ανταγωνιστικό επίπεδο, ικανός σε ορεινούς αγώνες.

function calculateWattsPerKg(power, bodyMassKg) {
  return (power / bodyMassKg).toFixed(2);
}

// Παράδειγμα:
const wpkg = calculateWattsPerKg(275, 70);
// Επιστρέφει: 3.93

9. VAM (Velocità Ascensionale Media)

Τύπος:

VAM (m/h) = Υψομετρική Διαφορά (m) / Χρόνος (ώρες)

Ορόσημα VAM:

VAM (m/h) Επίπεδο Παράδειγμα
600 - 900 Ερασιτεχνικό Ποδηλάτης σε τοπική ανάβαση
900 - 1200 Ανταγωνιστικό Καλός ερασιτέχνης στο Alpe d'Huez
1200 - 1500 Elite Ερασιτέχνης Ανηφορίστας εθνικού επιπέδου
1500 - 1800 Επαγγελματικό World Tour domestique
> 1800 Νικητής Grand Tour Pogačar, Vingegaard σε κρίσιμες αναβάσεις

Παράδειγμα Υπολογισμού:

Σενάριο: Ανάβαση Alpe d'Huez

  • Υψομετρική διαφορά: 1100 μέτρα
  • Χρόνος: 55 λεπτά = 0,917 ώρες
  • VAM = 1100 / 0,917 = 1200 m/h

Ερμηνεία: Αναρριχητική απόδοση ανταγωνιστικού επιπέδου.

function calculateVAM(elevationGainMeters, timeMinutes) {
  const hours = timeMinutes / 60;
  return Math.round(elevationGainMeters / hours);
}

// Παράδειγμα:
const vam = calculateVAM(1100, 55);
// Επιστρέφει: 1200 m/h

10. Εκτίμηση W/kg από το VAM

Τύπος:

W/kg ≈ VAM (m/h) / 100 / (Κλίση% + 3)

Παράδειγμα Υπολογισμού:

Σενάριο: Ανάβαση με 8% μέση κλίση, VAM = 1200 m/h

W/kg = 1200 / 100 / (8 + 3)

W/kg = 12 / 11 = 4,36 W/kg

Επαλήθευση: Για αναβάτη 70kg → 305W διατηρήσιμη ισχύς στην ανάβαση.

function estimateWkgFromVAM(vam, gradientPercent) {
  return (vam / 100 / (gradientPercent + 3)).toFixed(2);
}

// Παράδειγμα:
const wkg = estimateWkgFromVAM(1200, 8);
// Επιστρέφει: 4.36

Αεροδυναμική Εξίσωση Ισχύος

11. Συνολικές Απαιτήσεις Ισχύος

Πλήρης Τύπος:

P_total = P_aero + P_gravity + P_rolling + P_kinetic

Τύποι Συστατικών:

Αεροδυναμική Αντίσταση:
P_aero = CdA × 0,5 × ρ × V³
Βαρυτική (Αναρρίχηση):
P_gravity = m × g × sin(θ) × V
Αντίσταση Κύλισης:
P_rolling = Crr × m × g × cos(θ) × V
Κινητική (Επιτάχυνση):
P_kinetic = m × a × V

Σταθερές & Μεταβλητές:

  • CdA = Συντελεστής οπισθέλκουσας × μετωπική επιφάνεια (m²)
    • Τυπική θέση hoods δρόμου: 0,35-0,40 m²
    • Drops: 0,32-0,37 m²
    • Θέση TT: 0,20-0,25 m²
  • ρ = Πυκνότητα αέρα (1,225 kg/m³ στο επίπεδο της θάλασσας, 15°C)
  • V = Ταχύτητα (m/s)
  • m = Συνολική μάζα (αναβάτης + ποδήλατο, kg)
  • g = Βαρύτητα (9,81 m/s²)
  • θ = Γωνία κλίσης (ακτίνια ή μοίρες που έχουν μετατραπεί)
  • Crr = Συντελεστής αντίστασης κύλισης (~0,004 για καλά ελαστικά δρόμου)
  • a = Επιτάχυνση (m/s²)

Παράδειγμα Υπολογισμού (Χρονόμετρο σε Επίπεδο Δρόμο):

Σενάριο:

  • Ταχύτητα: 40 km/h = 11,11 m/s
  • CdA: 0,22 m² (καλή θέση TT)
  • Συνολική μάζα: 75kg (αναβάτης) + 8kg (ποδήλατο) = 83kg
  • Επίπεδος δρόμος (κλίση = 0°)
  • Σταθερή ταχύτητα (επιτάχυνση = 0)

Υπολογισμός:

  1. P_aero = 0,22 × 0,5 × 1,225 × 11,11³ = 185W
  2. P_gravity = 0W (επίπεδος δρόμος)
  3. P_rolling = 0,004 × 83 × 9,81 × 11,11 = 36W
  4. P_kinetic = 0W (σταθερή ταχύτητα)
  5. P_total = 185 + 0 + 36 + 0 = 221W

Ερμηνεία: Απαιτούνται 221W για τη διατήρηση των 40 km/h σε θέση TT σε επίπεδο δρόμο.

Υλοποίηση σε JavaScript:

function calculatePowerRequired(params) {
  const {
    velocityKph,
    CdA = 0.32,              // m²
    rho = 1.225,             // kg/m³
    mass = 83,               // kg (αναβάτης + ποδήλατο)
    gradientPercent = 0,     // %
    Crr = 0.004,             // αντίσταση κύλισης
    accelerationMps2 = 0     // m/s²
  } = params;

  // Μετατροπή ταχύτητας σε m/s
  const V = velocityKph / 3.6;

  // Μετατροπή κλίσης σε γωνία
  const theta = Math.atan(gradientPercent / 100);

  // Υπολογισμός κάθε συστατικού
  const P_aero = CdA * 0.5 * rho * Math.pow(V, 3);
  const P_gravity = mass * 9.81 * Math.sin(theta) * V;
  const P_rolling = Crr * mass * 9.81 * Math.cos(theta) * V;
  const P_kinetic = mass * accelerationMps2 * V;

  return {
    total: Math.round(P_aero + P_gravity + P_rolling + P_kinetic),
    aero: Math.round(P_aero),
    gravity: Math.round(P_gravity),
    rolling: Math.round(P_rolling),
    kinetic: Math.round(P_kinetic)
  };
}

// Παράδειγμα: TT στα 40 km/h
const power_tt = calculatePowerRequired({
  velocityKph: 40,
  CdA: 0.22,
  mass: 83,
  gradientPercent: 0
});
// Επιστρέφει: { total: 221, aero: 185, gravity: 0, rolling: 36, kinetic: 0 }

// Παράδειγμα: Ανάβαση 8% στα 15 km/h
const power_climb = calculatePowerRequired({
  velocityKph: 15,
  CdA: 0.38,
  mass: 75,
  gradientPercent: 8
});
// Επιστρέφει: { total: 265, aero: 27, gravity: 244, rolling: 11, kinetic: 0 }

Βοηθητικές Συναρτήσεις

Εργαλεία Μετατροπής Μονάδων

Υλοποίηση σε JavaScript:

// Μετατροπές χρόνου
function hoursToSeconds(hours) {
  return hours * 3600;
}

function minutesToSeconds(minutes) {
  return minutes * 60;
}

function secondsToHours(seconds) {
  return seconds / 3600;
}

function formatDuration(seconds) {
  const hours = Math.floor(seconds / 3600);
  const minutes = Math.floor((seconds % 3600) / 60);
  const secs = Math.round(seconds % 60);
  return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
}

// Μετατροπές ταχύτητας
function kphToMps(kph) {
  return kph / 3.6;
}

function mpsToKph(mps) {
  return mps * 3.6;
}

// Μετατροπές ενέργειας
function joulesTokJ(joules) {
  return joules / 1000;
}

function kJToJoules(kJ) {
  return kJ * 1000;
}

function wattsToKJ(watts, durationSeconds) {
  return (watts * durationSeconds) / 1000;
}

// Παραδείγματα:
formatDuration(7265);        // Επιστρέφει: "2:01:05"
kphToMps(40);                // Επιστρέφει: 11.11 m/s
wattsToKJ(250, 3600);        // Επιστρέφει: 900 kJ (1 ώρα στα 250W)

Πόροι Υλοποίησης

Όλοι οι τύποι σε αυτή τη σελίδα είναι έτοιμοι για παραγωγή και έχουν επικυρωθεί βάσει της επιστημονικής βιβλιογραφίας και δεδομένων από πραγματικά βατόμετρα. Χρησιμοποιήστε τους για προσαρμοσμένα εργαλεία ανάλυσης, επαλήθευση ή βαθύτερη κατανόηση των υπολογισμών της προπόνησης βάσει ισχύος.

💡 Βέλτιστες Πρακτικές

  • Επικύρωση εισόδων: Ελέγξτε για λογικά εύρη ισχύος (0-2000W), θετικές διάρκειες.
  • Χειρισμός οριακών περιπτώσεων: Διαίρεση με το μηδέν, null/undefined δεδομένα, απουσία FTP.
  • Στρογγυλοποίηση: CTL/ATL/TSB σε 1 δεκαδικό, TSS σε ακέραιο, W/kg σε 2 δεκαδικά.
  • Αποθήκευση ακρίβειας: Διατηρήστε πλήρη ακρίβεια στη βάση δεδομένων, στρογγυλοποιήστε μόνο για την εμφάνιση.
  • Ζώνες ώρας: Διαχειριστείτε το UTC έναντι της τοπικής ώρας με συνέπεια για την ανάλυση πολλών ημερών.
  • Βαθμονόμηση βατόμετρου: Υπενθυμίστε στους χρήστες να κάνουν zero-offset πριν από τις διαδρομές.
  • Επικύρωση FTP: Επισημάνετε ύποπτες τιμές FTP (>500W ή <100W για ενήλικες).
  • Ενδελεχής δοκιμή: Χρησιμοποιήστε αρχεία διαδρομών με γνωστά αποτελέσματα για να επαληθεύσετε τους υπολογισμούς.