Τύποι Ποδηλατικής Ισχύος
Μαθηματικά Θεμέλια των Δεικτών του Bike Analytics
Οδηγός Υλοποίησης
Αυτή η σελίδα παρέχει τύπους έτοιμους για χρήση και μεθόδους υπολογισμού βήμα προς βήμα για όλους τους δείκτες του Bike Analytics. Χρησιμοποιήστε τους για προσαρμοσμένες υλοποιήσεις, επαλήθευση ή βαθύτερη κατανόηση της προπόνησης βάσει ισχύος.
⚠️ Σημειώσεις Υλοποίησης
- Όλες οι τιμές ισχύος σε watts (W), ο χρόνος σε δευτερόλεπτα εκτός αν ορίζεται διαφορετικά.
- Το FTP και η CP είναι κατώφλια ειδικά για κάθε άτομο—δεν υπάρχουν καθολικές τιμές.
- Να επικυρώνετε πάντα τις εισόδους για λογικά εύρη (τυπικά 0-2000W).
- Χειριστείτε τις οριακές περιπτώσεις (διαίρεση με το μηδέν, αρνητική ισχύς).
- Τα δεδομένα ισχύος απαιτούν διαστήματα καταγραφής 1 δευτερολέπτου για ακρίβεια.
Βασικοί Δείκτες Απόδοσης
1. Βαθμολογία Προπονητικού Σρες (TSS)
Τύπος:
Παράδειγμα Υπολογισμού:
Σενάριο: Διαδρομή 2 ωρών, NP = 235W, FTP = 250W
- Υπολογισμός IF: IF = 235 / 250 = 0,94
- Διάρκεια σε δευτερόλεπτα: 2 ώρες × 3600 = 7200 δευτερόλεπτα
- TSS = (7200 × 235 × 0,94) / (250 × 3600) × 100
- 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 δευτερολέπτων):
Γιατί η 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 | Επίπεδο Προσπάθειας | Παράδειγμα Προπόνησης |
|---|---|---|
| < 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 | Σημασία |
|---|---|---|
| Χρονόμετρο Δρόμου / Σταθερή Προσπάθεια | 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) - Γραμμικό Μοντέλο
Τύπος:
Υπολογισμός από Πολλαπλές Προσπάθειες:
Απαιτούνται 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) - Μοντέλο Διαφορικής Εξίσωσης
Τύποι:
W'exp(t) = ∫(P(t) - CP) dt
W'rec(t) = W' × (1 - e^(-t/τ))
και Δ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 (Χρόνιο Προπονητικό Φορτίο): Εκθετικά σταθμισμένος μέσος όρος 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)
Τύπος:
Ορόσημα 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:
| 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
Τύπος:
Παράδειγμα Υπολογισμού:
Σενάριο: Ανάβαση με 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_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)
Υπολογισμός:
- P_aero = 0,22 × 0,5 × 1,225 × 11,11³ = 185W
- P_gravity = 0W (επίπεδος δρόμος)
- P_rolling = 0,004 × 83 × 9,81 × 11,11 = 36W
- P_kinetic = 0W (σταθερή ταχύτητα)
- 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 για ενήλικες).
- Ενδελεχής δοκιμή: Χρησιμοποιήστε αρχεία διαδρομών με γνωστά αποτελέσματα για να επαληθεύσετε τους υπολογισμούς.