စက်ဘီးစီး စွမ်းအား ဖော်မြူလာများ
Bike Analytics တိုင်းတာမှုများ၏ သင်္ချာ အခြေခံအုတ်မြစ်
အကောင်အထည်ဖော်မှု လမ်းညွှန်
ဤစာမျက်နှာသည် Bike Analytics metrics အားလုံးအတွက် copy-paste ဖော်မြူလာများနှင့် အဆင့်ဆင့် တွက်ချက်မှု နည်းလမ်းများကို ပေးထားသည်။ စိတ်ကြိုက် အကောင်အထည်ဖော်မှုများ၊ အတည်ပြုခြင်း၊ သို့မဟုတ် စွမ်းအား-အခြေခံ လေ့ကျင့်မှုကို ပိုမိုနက်ရှိုင်းစွာ နားလည်ရန် ၎င်းတို့ကို အသုံးပြုပါ။
⚠️ အကောင်အထည်ဖော်မှု မှတ်စုများ
- စွမ်းအား တန်ဖိုးများ အားလုံးသည် watts (W) ဖြစ်ပြီး၊ မဖော်ပြထားပါက အချိန်သည် စက္ကန့်များ ဖြစ်သည်
- FTP နှင့် CP သည် တစ်ဦးချင်း-သီးသန့် thresholds များဖြစ်သည် - universal တန်ဖိုးများ မရှိပါ
- Inputs များကို ကျိုးကြောင်းဆီလျော်သော ranges များ (0-2000W ပုံမှန်အားဖြင့်) အတွက် အမြဲတမ်း validate လုပ်ပါ
- Edge cases များကို ကိုင်တွယ်ပါ (သုညဖြင့် စားခြင်း၊ အနှုတ်လက္ခဏာ စွမ်းအား)
- စွမ်းအား ဒေတာသည် တိကျမှုအတွက် ၁-စက္ကန့် မှတ်တမ်းတင်ခြင်း ကြားကာလများ လိုအပ်သည်
အဓိက စွမ်းဆောင်ရည် Metrics
၁။ Training Stress Score (TSS)
ဖော်မြူလာ:
တွက်ချက်ထားသော ဥပမာ:
ဇာတ်လမ်း: ၂-နာရီ စီးနင်းမှု၊ NP = 235W, FTP = 250W
- IF တွက်ချက်ခြင်း: IF = 235 / 250 = 0.94
- စက္ကန့်ဖြင့် ကြာချိန်: ၂ နာရီ × 3600 = 7200 seconds
- TSS = (7200 × 235 × 0.94) / (250 × 3600) × 100
- TSS = 1,590,720 / 900,000 × 100 = 176.7 TSS
အဓိပ္ပါယ်ဖွင့်ဆိုချက်: ပြင်းထန်သော လေ့ကျင့်မှု စီးနင်းခြင်း (>150 TSS)၊ ၂-၃ ရက် ပြန်လည်ကောင်းမွန်မှုကို မျှော်လင့်ပါ
JavaScript Implementation:
function calculateTSS(durationSeconds, normalizedPower, ftp) {
const intensityFactor = normalizedPower / ftp;
const tss = (durationSeconds * normalizedPower * intensityFactor) / (ftp * 3600) * 100;
return Math.round(tss);
}
// Example usage:
const tss = calculateTSS(7200, 235, 250);
// Returns: 177
၂။ Normalized Power (NP)
Algorithm (၃၀-စက္ကန့် rolling average):
ဘာကြောင့် ၄ ထပ် လဲ?
လေးထပ် (Quartic) ဆက်နွယ်မှုသည် ပြောင်းလဲနိုင်သော အားထုတ်မှုများ၏ linear မဟုတ်သော ဇီဝကမ္မ ကုန်ကျစရိတ်ကို ထင်ဟပ်စေသည်။ Surges များနှင့် ပြန်လည်ကောင်းမွန်မှုများ ပါသော စီးနင်းမှုသည် တူညီသော ပျမ်းမျှဖြင့် တည်ငြိမ်သော စွမ်းအားထက် စွမ်းအင် ပိုကုန်ကျသည်။
ဥပမာ:
- တည်ငြိမ်သော စီးနင်းမှု: ၁ နာရီ 200W → NP = 200W, Average = 200W
- ပြောင်းလဲသော စီးနင်းမှု: 300W/100W တစ်လှည့်စီ → Average = 200W, NP = 225W
တူညီသော ပျမ်းမျှ စွမ်းအား၊ သို့သော် ပြောင်းလဲသော စီးနင်းမှုသည် surges ၏ ဇီဝကမ္မ ကုန်ကျစရိတ်ကြောင့် 12% ပိုမြင့်သော NP ရှိသည်
JavaScript Implementation:
function calculateNormalizedPower(powerData) {
// powerData is array of 1-second power values
// Step 1: Calculate 30-second rolling averages
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);
}
// Step 2: Raise to 4th power
const powered = rollingAvgs.map(p => Math.pow(p, 4));
// Step 3: Average of 4th powers
const avgPowered = powered.reduce((sum, p) => sum + p, 0) / powered.length;
// Step 4: Take 4th root
const np = Math.pow(avgPowered, 0.25);
return Math.round(np);
}
// Example usage:
const powerData = [/* 1-second power array */];
const np = calculateNormalizedPower(powerData);
// Returns: NP in watts
၃။ Intensity Factor (IF)
ဖော်မြူလာ:
အဓိပ္ပါယ်ကောက်ယူမှု Ranges:
| IF Range | အားထုတ်မှု အဆင့် | နမူနာ လေ့ကျင့်ခန်း |
|---|---|---|
| < 0.75 | ပြန်လည်ကောင်းမွန် / လွယ်ကူ | တက်ကြွသော ပြန်လည်ကောင်းမွန်မှု စီးနင်းခြင်း၊ Zone 1-2 |
| 0.75 - 0.85 | ခံနိုင်ရည် | ရှည်လျား တည်ငြိမ်သော စီးနင်းခြင်း၊ aerobic အခြေခံ |
| 0.85 - 0.95 | Tempo | Sweet spot လေ့ကျင့်မှု၊ tempo intervals |
| 0.95 - 1.05 | Threshold | FTP intervals၊ time trial အားထုတ်မှု |
| 1.05 - 1.15 | VO₂max | ၅-မိနစ် intervals၊ criterium ပြိုင်ပွဲ |
| > 1.15 | Anaerobic | တိုတောင်းသော sprints၊ တိုက်ခိုက်ခြင်းများ၊ MTB bursts |
တွက်ချက်မှု ဥပမာ:
ဇာတ်လမ်း: NP = 235W, FTP = 250W
IF = 235 / 250 = 0.94
အဓိပ္ပါယ်ဖွင့်ဆိုချက်: High tempo / sub-threshold အားထုတ်မှု၊ ၂-၃ နာရီ ကြာရှည်ခံနိုင်သည်
function calculateIF(normalizedPower, ftp) {
return (normalizedPower / ftp).toFixed(2);
}
// Example:
const if_value = calculateIF(235, 250);
// Returns: 0.94
၄။ Variability Index (VI)
ဖော်မြူလာ:
Discipline အလိုက် အဓိပ္ပါယ်ကောက်ယူမှု:
| Discipline | Typical VI | အဓိပ္ပါယ် |
|---|---|---|
| Road TT / တည်ငြိမ်သော အားထုတ်မှု | 1.00 - 1.05 | အလွန် တသမတ်တည်းရှိသော စွမ်းအား၊ အကောင်းဆုံး အရှိန်ထိန်းခြင်း |
| Road Racing | 1.05 - 1.10 | Surges အချို့ရှိ၊ ယေဘုယျအားဖြင့် တည်ငြိမ်သည် |
| Criterium | 1.10 - 1.20 | မကြာခဏ အရှိန်မြှင့်ခြင်းများနှင့် တိုက်ခိုက်ခြင်းများ |
| Mountain Bike XC | 1.15 - 1.30+ | မြင့်မားစွာ ပြောင်းလဲနိုင်သည်၊ စဉ်ဆက်မပြတ် surges |
တွက်ချက်မှု ဥပမာ:
Road Race: NP = 240W, Avg Power = 230W
VI = 240 / 230 = 1.04 (တည်ငြိမ်သော အရှိန်ထိန်းခြင်း)
MTB Race: NP = 285W, Avg Power = 235W
VI = 285 / 235 = 1.21 (အလွန် ပြောင်းလဲနိုင်သည်၊ burst အားထုတ်မှုများ)
function calculateVI(normalizedPower, averagePower) {
return (normalizedPower / averagePower).toFixed(2);
}
// Example:
const vi_road = calculateVI(240, 230); // Returns: 1.04
const vi_mtb = calculateVI(285, 235); // Returns: 1.21
Critical Power & W' (Anaerobic Capacity)
၅။ Critical Power (CP) - Linear Model
ဖော်မြူလာ:
အားထုတ်မှု အများအပြားမှ တွက်ချက်ခြင်း:
မတူညီသော ကြာချိန်များတွင် အမြင့်ဆုံး အားထုတ်မှု ၂-၄ ကြိမ် လိုအပ်သည် (ဥပမာ၊ ၃၊ ၅၊ ၁၂၊ ၂၀ မိနစ်)
နမူနာ ဒေတာ:
| ကြာချိန် | စွမ်းအား (W) | စုစုပေါင်း အလုပ် (kJ) |
|---|---|---|
| ၃ မိနစ် (180s) | 400W | 72 kJ |
| ၅ မိနစ် (300s) | 365W | 109.5 kJ |
| ၁၂ မိနစ် (720s) | 310W | 223.2 kJ |
| ၂၀ မိနစ် (1200s) | 285W | 342 kJ |
Linear regression သုံးခြင်း (Work = CP × Time + W'):
- CP = 270W (regression line ၏ လျှောစောက်)
- W' = 18.5 kJ (y-intercept)
JavaScript Implementation:
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
// Linear regression: 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
};
}
// Example usage:
const efforts = [
{duration: 180, power: 400},
{duration: 300, power: 365},
{duration: 720, power: 310},
{duration: 1200, power: 285}
];
const result = calculateCP_Linear(efforts);
// Returns: { CP: 270.0, Wprime: 18.5 }
၆။ W' Balance (W'bal) - Differential Equation Model
ဖော်မြူလာများ:
W'exp(t) = ∫(P(t) - CP) dt
W'rec(t) = W' × (1 - e^(-t/τ))
and ΔCP = (CP - P(t))
လက်တွေ့ကမ္ဘာ ဥပမာ:
စက်ဘီးသမား specs: CP = 270W, W' = 18.5 kJ
ဇာတ်လမ်း ၁ - ပြင်းထန်သော တိုက်ခိုက်မှု:
- စီးနင်းသူသည် စက္ကန့် ၃၀ ကြာ 400W သို့ surges လုပ်သည်
- W' ကုန်ကျစရိတ်: (400 - 270) × 30 = 3,900 J = 3.9 kJ
- ကျန်ရှိသော W'bal: 18.5 - 3.9 = 14.6 kJ
ဇာတ်လမ်း ၂ - ပြန်လည်ကောင်းမွန်မှု:
- တိုက်ခိုက်ပြီးနောက်၊ ၂ မိနစ်ကြာ 200W (CP အောက် 70W) သို့ ကျဆင်းသည်
- ΔCP = 270 - 200 = 70W
- τ = 546 × e^(-0.01 × 70) + 316 = 588 seconds
- 120s တွင် ပြန်လည်ကောင်းမွန်မှု: 18.5 × (1 - e^(-120/588)) = 3.5 kJ recovered
- W'bal အသစ်: 14.6 + 3.5 = 18.1 kJ
JavaScript Implementation:
function calculateWbalance(powerData, CP, Wprime) {
// powerData = array of {time: seconds, power: watts}
let wbal = Wprime * 1000; // Convert to 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) {
// Expenditure above CP
const expenditure = (power - CP) * dt;
wbal -= expenditure;
} else {
// Recovery below 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;
}
// Ensure W'bal doesn't exceed max or go negative
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;
}
// Example usage:
const powerData = [
{time: 0, power: 200},
{time: 1, power: 210},
// ... rest of ride data
];
const wbalHistory = calculateWbalance(powerData, 270, 18.5);
// Returns array of W'bal values over time
Performance Management Chart (PMC)
၇။ CTL, ATL, TSB တွက်ချက်မှုများ
ဖော်မြူလာများ (Exponentially Weighted Moving Averages):
Metric အဓိပ္ပါယ်ဖွင့်ဆိုချက်များ:
- CTL (Chronic Training Load): ၄၂-ရက် exponentially weighted average - ကြံ့ခိုင်မှု (fitness) ကို ကိုယ်စားပြုသည်
- ATL (Acute Training Load): ၇-ရက် exponentially weighted average - မောပန်းမှု (fatigue) ကို ကိုယ်စားပြုသည်
- TSB (Training Stress Balance): Form = Fitness - Fatigue
တွက်ချက်ထားသော ဥပမာ (၇-ရက် လေ့ကျင့်မှု Block):
| နေ့ | TSS | CTL | ATL | TSB | အခြေအနေ |
|---|---|---|---|---|---|
| Mon | 100 | 75.0 | 80.0 | -5.0 | လေ့ကျင့်ခြင်း |
| Tue | 50 | 74.4 | 75.7 | -1.3 | ပြန်လည်ကောင်းမွန်ရေး |
| Wed | 120 | 75.5 | 82.0 | -6.5 | ပြင်းထန် လေ့ကျင့်ခြင်း |
| Thu | 0 | 73.7 | 70.3 | +3.4 | နားရက် |
| Fri | 80 | 73.8 | 71.7 | +2.1 | အလယ်အလတ် |
| Sat | 150 | 75.6 | 82.9 | -7.3 | ရှည်လျားသော စီးနင်းမှု |
| Sun | 40 | 74.8 | 76.8 | -2.0 | ပြန်လည်ကောင်းမွန်ရေး |
TSB အဓိပ္ပါယ်ကောက်ယူမှု:
| TSB Range | အခြေအနေ | လုပ်ဆောင်ချက် |
|---|---|---|
| < -30 | အန္တရာယ် များသည် | လေ့ကျင့်မှုလွန်ကဲခြင်း သတိပေးချက် - ဝန်ပိမှု လျှော့ချပါ |
| -30 to -10 | ပြင်းထန်စွာ လေ့ကျင့်နေသည် | ကြံ့ခိုင်မှု တည်ဆောက်ခြင်း၊ ပြန်လည်ကောင်းမွန်မှုကို စောင့်ကြည့်ပါ |
| -10 to +5 | အကောင်းဆုံး | ပုံမှန် လေ့ကျင့်မှု ဇုန် |
| +5 to +15 | ပြိုင်ပွဲ အသင့်ဖြစ် | အထွတ်အထိပ် ပုံစံ - ဒီအပတ် ပြိုင်ပွဲ |
| > +25 | Detraining | ကြံ့ခိုင်မှု ဆုံးရှုံးခြင်း - ဝန်ပိမှု တိုးမြှင့်ပါ |
JavaScript Implementation:
function calculatePMC(workouts) {
// workouts = [{date: "YYYY-MM-DD", tss: number}, ...]
let ctl = 0, atl = 0;
const results = [];
workouts.forEach(workout => {
// Update CTL (42-day time constant)
ctl = ctl + (workout.tss - ctl) / 42;
// Update ATL (7-day time constant)
atl = atl + (workout.tss - atl) / 7;
// Calculate TSB (yesterday's CTL - today's ATL for traditional calculation)
// For simplicity here using current values
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";
}
// Example usage:
const workouts = [
{date: "2025-01-01", tss: 100},
{date: "2025-01-02", tss: 50},
{date: "2025-01-03", tss: 120},
// ... more workouts
];
const pmc = calculatePMC(workouts);
// Returns array with CTL, ATL, TSB for each day
စွမ်းအား-နှင့်-ကိုယ်အလေးချိန် & တောင်တက် Metrics
၈။ စွမ်းအား-နှင့်-ကိုယ်အလေးချိန် အချိုး
ဖော်မြူလာ:
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, သန်မာသော amateur |
| Elite Amateur | 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);
}
// Example:
const wpkg = calculateWattsPerKg(275, 70);
// Returns: 3.93
၉။ VAM (Mean Ascent Velocity)
ဖော်မြူလာ:
VAM စံနှုန်းများ:
| VAM (m/h) | အဆင့် | ဥပမာ |
|---|---|---|
| 600 - 900 | အပန်းဖြေ | ဒေသတွင်း တောင်တက်တွင် Club စီးနင်းသူ |
| 900 - 1200 | ယှဉ်ပြိုင်မှုရှိသော | Alpe d'Huez တွင် ကောင်းမွန်သော amateur |
| 1200 - 1500 | Elite Amateur | နိုင်ငံအဆင့် တောင်တက်သမား |
| 1500 - 1800 | ကြေးစား | World Tour domestique |
| > 1800 | Grand Tour Winner | အဓိက တောင်တက်များတွင် Pogačar, Vingegaard |
တွက်ချက်မှု ဥပမာ:
ဇာတ်လမ်း: Alpe d'Huez တောင်တက်
- Elevation gain: 1100 meters
- အချိန်: ၅၅ မိနစ် = 0.917 hours
- VAM = 1100 / 0.917 = 1200 m/h
အဓိပ္ပါယ်ဖွင့်ဆိုချက်: ယှဉ်ပြိုင်မှုအဆင့် တောင်တက် စွမ်းဆောင်ရည်
function calculateVAM(elevationGainMeters, timeMinutes) {
const hours = timeMinutes / 60;
return Math.round(elevationGainMeters / hours);
}
// Example:
const vam = calculateVAM(1100, 55);
// Returns: 1200 m/h
၁၀။ VAM မှ W/kg ခန့်မှန်းခြင်း
ဖော်မြူလာ:
တွက်ချက်မှု ဥပမာ:
ဇာတ်လမ်း: 8% ပျမ်းမျှ gradient ပါသော တောင်တက်၊ 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);
}
// Example:
const wkg = estimateWkgFromVAM(1200, 8);
// Returns: 4.36
Aerodynamic စွမ်းအား ညီမျှခြင်း
၁၁။ စုစုပေါင်း စွမ်းအား လိုအပ်ချက်များ
ပြီးပြည့်စုံသော ဖော်မြူလာ:
အစိတ်အပိုင်း ဖော်မြူလာများ:
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 = Drag coefficient × frontal area (m²)
- ပုံမှန် လမ်းစက်ဘီး hoods: 0.35-0.40 m²
- Drops: 0.32-0.37 m²
- TT position: 0.20-0.25 m²
- ρ = လေ သိပ်သည်းဆ (ပင်လယ်ရေမျက်နှာပြင်တွင် 1.225 kg/m³, 15°C)
- V = အလျင် (m/s)
- m = စုစုပေါင်း ဒြပ်ထု (စီးနင်းသူ + စက်ဘီး, kg)
- g = ကမ္ဘာ့ဆွဲငင်အား (9.81 m/s²)
- θ = Gradient ထောင့် (radians သို့မဟုတ် ဒီဂရီ ပြောင်းလဲပြီး)
- Crr = Rolling resistance coefficient (လမ်းတာယာ အကောင်းစားအတွက် ~0.004)
- a = အရှိန် (m/s²)
တွက်ချက်ထားသော ဥပမာ (မြေပြန့်လမ်း TT):
ဇာတ်လမ်း:
- အလျင်: 40 km/h = 11.11 m/s
- CdA: 0.22 m² (ကောင်းမွန်သော TT position)
- စုစုပေါင်း ဒြပ်ထု: 75kg (စီးနင်းသူ) + 8kg (စက်ဘီး) = 83kg
- မြေပြန့်လမ်း (gradient = 0°)
- ကိန်းသေ အမြန်နှုန်း (acceleration = 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
အဓိပ္ပါယ်ဖွင့်ဆိုချက်: မြေပြန့်လမ်းတွင် TT position ဖြင့် 40 km/h ထိန်းထားရန် 221W လိုအပ်သည်
JavaScript Implementation:
function calculatePowerRequired(params) {
const {
velocityKph,
CdA = 0.32, // m²
rho = 1.225, // kg/m³
mass = 83, // kg (rider + bike)
gradientPercent = 0, // %
Crr = 0.004, // rolling resistance
accelerationMps2 = 0 // m/s²
} = params;
// Convert velocity to m/s
const V = velocityKph / 3.6;
// Convert gradient to angle
const theta = Math.atan(gradientPercent / 100);
// Calculate each component
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)
};
}
// Example: TT at 40 km/h
const power_tt = calculatePowerRequired({
velocityKph: 40,
CdA: 0.22,
mass: 83,
gradientPercent: 0
});
// Returns: { total: 221, aero: 185, gravity: 0, rolling: 36, kinetic: 0 }
// Example: 8% climb at 15 km/h
const power_climb = calculatePowerRequired({
velocityKph: 15,
CdA: 0.38,
mass: 75,
gradientPercent: 8
});
// Returns: { total: 265, aero: 27, gravity: 244, rolling: 11, kinetic: 0 }
အထောက်အကူပြု Functions များ
Unit ပြောင်းလဲခြင်း Utilities
JavaScript Implementation:
// Time conversions
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')}`;
}
// Speed conversions
function kphToMps(kph) {
return kph / 3.6;
}
function mpsToKph(mps) {
return mps * 3.6;
}
// Energy conversions
function joulesTo kJ(joules) {
return joules / 1000;
}
function kJToJoules(kJ) {
return kJ * 1000;
}
function wattsToKJ(watts, durationSeconds) {
return (watts * durationSeconds) / 1000;
}
// Examples:
formatDuration(7265); // Returns: "2:01:05"
kphToMps(40); // Returns: 11.11 m/s
wattsToKJ(250, 3600); // Returns: 900 kJ (1 hour at 250W)
အကောင်အထည်ဖော်မှု အရင်းအမြစ်များ
ဤစာမျက်နှာပေါ်ရှိ ဖော်မြူလာများ အားလုံးသည် ထုတ်လုပ်မှု-အဆင့် အဆင်သင့်ဖြစ်ပြီး သိပ္ပံနည်းကျ စာပေများနှင့် လက်တွေ့ကမ္ဘာ power meter ဒေတာများနှင့် တိုက်ဆိုင်စစ်ဆေးပြီး ဖြစ်သည်။ စိတ်ကြိုက် analytics tools များ၊ အတည်ပြုခြင်း၊ သို့မဟုတ် စွမ်းအား-အခြေခံ လေ့ကျင့်မှု တွက်ချက်ခြင်းများကို ပိုမိုနက်ရှိုင်းစွာ နားလည်ရန် ၎င်းတို့ကို အသုံးပြုပါ။
💡 အကောင်းဆုံး အလေ့အကျင့်များ
- Inputs ကို Validate လုပ်ပါ: ကျိုးကြောင်းဆီလျော်သော စွမ်းအား ranges (0-2000W)၊ အပေါင်းလက္ခဏာ ကြာချိန်များကို စစ်ဆေးပါ
- Edge cases ကို ကိုင်တွယ်ပါ: သုညဖြင့် စားခြင်း၊ null/undefined ဒေတာ၊ FTP ပျောက်ဆုံးခြင်း
- သင့်လျော်သလို ပတ်ဖြတ်ပါ: CTL/ATL/TSB ကို ၁ ဒသမ၊ TSS ကို integer၊ W/kg ကို ၂ ဒသမ
- တိကျမှုကို သိမ်းဆည်းပါ: Database ထဲတွင် တိကျမှု အပြည့် သိမ်းဆည်းပါ၊ ပြသရန်အတွက်သာ ပတ်ဖြတ်ပါ
- အချိန်ဇုန်များ: ရက်များစွာ ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက် UTC vs. local time ကို တသမတ်တည်း ကိုင်တွယ်ပါ
- Power meter ချိန်ညှိခြင်း: မစီးနင်းမီ zero-offset လုပ်ရန် အသုံးပြုသူများကို သတိပေးပါ
- FTP validation: သံသယဖြစ်ဖွယ် FTP တန်ဖိုးများကို အလံပြပါ (လူကြီးများအတွက် >500W သို့မဟုတ် <100W)< /li>
- သေချာစွာ စမ်းသပ်ပါ: တွက်ချက်မှုများကို အတည်ပြုရန် သိရှိထားသော-ကောင်းမွန်သည့် စီးနင်းမှု ဖိုင်များကို သုံးပါ