সাইক্লিং পাওয়ার ফর্মুলা

বাইক অ্যানালিটিক্স মেট্রিক্সের গাণিতিক ভিত্তি

বাস্তবায়ন নির্দেশিকা

এই পৃষ্ঠাটি সমস্ত বাইক অ্যানালিটিক্স মেট্রিক্সের জন্য কপি-পেস্ট ফর্মুলা এবং ধাপে ধাপে গণনা পদ্ধতি প্রদান করে। কাস্টম বাস্তবায়ন, যাচাইকরণ বা পাওয়ার-ভিত্তিক প্রশিক্ষণের গভীর বোঝার জন্য এগুলি ব্যবহার করুন।

⚠️ বাস্তবায়ন নোট

  • সমস্ত পাওয়ার মান ওয়াটে (W), সময় সেকেন্ডে যদি না নির্দিষ্ট করা হয়
  • FTP এবং CP ব্যক্তি-নির্দিষ্ট থ্রেশহোল্ড—কোনো সার্বজনীন মান নেই
  • যুক্তিসঙ্গত পরিসরের জন্য সর্বদা ইনপুট যাচাই করুন (০-২০০০W সাধারণ)
  • এজ কেস হ্যান্ডল করুন (শূন্য দ্বারা ভাগ, নেতিবাচক পাওয়ার)
  • নির্ভুলতার জন্য পাওয়ার ডেটার জন্য ১-সেকেন্ড রেকর্ডিং ইন্টারভাল প্রয়োজন

মূল পারফরম্যান্স মেট্রিক্স

১. ট্রেনিং স্ট্রেস স্কোর (TSS)

ফর্মুলা:

TSS = (duration_seconds × NP × IF) / (FTP × 3600) × 100
where IF = NP / FTP

কাজের উদাহরণ:

পরিস্থিতি: ২-ঘণ্টা রাইড, 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), ২-৩ দিনের পুনরুদ্ধার প্রত্যাশা করুন

JavaScript বাস্তবায়ন:

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

২. নরমালাইজড পাওয়ার (NP)

অ্যালগরিদম (৩০-সেকেন্ড রোলিং গড়):

1. সম্পূর্ণ রাইডের জন্য ৩০-সেকেন্ড রোলিং গড় পাওয়ার গণনা করুন
2. প্রতিটি ৩০-সেকেন্ড মান ৪র্থ শক্তিতে উন্নীত করুন
3. এই সমস্ত ^4 মানের গড় নিন
4. সেই গড়ের ৪র্থ রুট নিন
NP = ⁴√(average of [30s_avg^4])

৪র্থ শক্তি কেন?

চতুর্থ শক্তি (quartic) সম্পর্ক পরিবর্তনশীল প্রচেষ্টার অরৈখিক শারীরবৃত্তীয় খরচ প্রতিফলিত করে। সার্জ এবং পুনরুদ্ধার সহ একটি রাইড একই গড়ের স্থির পাওয়ারের চেয়ে বেশি শক্তি খরচ করে।

উদাহরণ:

  • স্থির রাইড: ১ ঘণ্টার জন্য 200W → NP = 200W, গড় = 200W
  • পরিবর্তনশীল রাইড: 300W/100W পর্যায়ক্রমে → গড় = 200W, NP = 225W

একই গড় পাওয়ার, কিন্তু সার্জের শারীরবৃত্তীয় খরচের কারণে পরিবর্তনশীল রাইডের ১২% বেশি NP

JavaScript বাস্তবায়ন:

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

৩. তীব্রতা ফ্যাক্টর (IF)

ফর্মুলা:

IF = NP / FTP

ব্যাখ্যা পরিসর:

IF পরিসর প্রচেষ্টা স্তর উদাহরণ ওয়ার্কআউট
< 0.75 পুনরুদ্ধার / সহজ সক্রিয় পুনরুদ্ধার রাইড, জোন ১-২
0.75 - 0.85 সহনশীলতা দীর্ঘ স্থির রাইড, অ্যারোবিক বেস
0.85 - 0.95 টেম্পো সুইট স্পট ট্রেনিং, টেম্পো ইন্টারভাল
0.95 - 1.05 থ্রেশহোল্ড FTP ইন্টারভাল, টাইম ট্রায়াল প্রচেষ্টা
1.05 - 1.15 VO₂max ৫-মিনিট ইন্টারভাল, ক্রিটেরিয়াম রেস
> 1.15 অ্যানারোবিক সংক্ষিপ্ত স্প্রিন্ট, আক্রমণ, MTB বার্স্ট

উদাহরণ গণনা:

পরিস্থিতি: NP = 235W, FTP = 250W

IF = 235 / 250 = 0.94

ব্যাখ্যা: উচ্চ টেম্পো / সাব-থ্রেশহোল্ড প্রচেষ্টা, ২-৩ ঘণ্টা টেকসই

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

// Example:
const if_value = calculateIF(235, 250);
// Returns: 0.94

৪. পরিবর্তনশীলতা সূচক (VI)

ফর্মুলা:

VI = NP / Average Power

শৃঙ্খলা অনুসারে ব্যাখ্যা:

শৃঙ্খলা সাধারণ VI অর্থ
Road TT / স্থির প্রচেষ্টা 1.00 - 1.05 অত্যন্ত সামঞ্জস্যপূর্ণ পাওয়ার, সর্বোত্তম পেসিং
রোড রেসিং 1.05 - 1.10 কিছু সার্জ, সাধারণত স্থির
ক্রিটেরিয়াম 1.10 - 1.20 ঘন ত্বরণ এবং আক্রমণ
মাউন্টেন বাইক 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);
}

// Example:
const vi_road = calculateVI(240, 230);  // Returns: 1.04
const vi_mtb = calculateVI(285, 235);   // Returns: 1.21

ক্রিটিক্যাল পাওয়ার এবং W' (অ্যানারোবিক ক্যাপাসিটি)

৫. ক্রিটিক্যাল পাওয়ার (CP) - লিনিয়ার মডেল

ফর্মুলা:

Time = W' / (Power - CP)
Rearranged: Power × Time = CP × Time + W'

একাধিক প্রচেষ্টা থেকে গণনা:

বিভিন্ন সময়কালে ২-৪টি সর্বাধিক প্রচেষ্টা প্রয়োজন (যেমন, ৩, ৫, ১২, ২০ মিনিট)

উদাহরণ ডেটা:

সময়কাল পাওয়ার (W) মোট কাজ (kJ)
৩ মিনিট (180s) 400W 72 kJ
৫ মিনিট (300s) 365W 109.5 kJ
১২ মিনিট (720s) 310W 223.2 kJ
২০ মিনিট (1200s) 285W 342 kJ

লিনিয়ার রিগ্রেশন ব্যবহার করে (Work = CP × Time + W'):

  • CP = 270W (রিগ্রেশন লাইনের ঢাল)
  • W' = 18.5 kJ (y-intercept)

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

  // 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' ব্যালেন্স (W'bal) - ডিফারেনশিয়াল ইকুয়েশন মডেল

ফর্মুলা:

ব্যয় (যখন P > CP):
W'exp(t) = ∫(P(t) - CP) dt
পুনরুদ্ধার (যখন P < CP):
W'rec(t) = W' × (1 - e^(-t/τ))
where τ = 546 × e^(-0.01 × ΔCP) + 316
and ΔCP = (CP - P(t))

বাস্তব-বিশ্ব উদাহরণ:

সাইক্লিস্ট স্পেসিফিকেশন: CP = 270W, W' = 18.5 kJ

পরিস্থিতি ১ - কঠিন আক্রমণ:

  • রাইডার ৩০ সেকেন্ডের জন্য 400W এ সার্জ করে
  • 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 সেকেন্ড
  • ১২০s এ পুনরুদ্ধার: 18.5 × (1 - e^(-120/588)) = ৩.৫ kJ পুনরুদ্ধৃত
  • নতুন W'bal: 14.6 + 3.5 = 18.1 kJ

JavaScript বাস্তবায়ন:

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

পারফরম্যান্স ম্যানেজমেন্ট চার্ট (PMC)

৭. 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 (ক্রনিক ট্রেনিং লোড): ৪২-দিনের এক্সপোনেনশিয়ালি ওয়েটেড গড় - ফিটনেস উপস্থাপন করে
  • ATL (অ্যাকিউট ট্রেনিং লোড): ৭-দিনের এক্সপোনেনশিয়ালি ওয়েটেড গড় - ক্লান্তি উপস্থাপন করে
  • TSB (ট্রেনিং স্ট্রেস ব্যালেন্স): ফর্ম = ফিটনেস - ক্লান্তি

কাজের উদাহরণ (৭-দিনের ট্রেনিং ব্লক):

দিন 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 to -10 কঠিন প্রশিক্ষণ ফিটনেস তৈরি, পুনরুদ্ধার পর্যবেক্ষণ করুন
-10 to +5 সর্বোত্তম স্বাভাবিক প্রশিক্ষণ জোন
+5 to +15 রেস রেডি শীর্ষ ফর্ম - এই সপ্তাহান্তে রেস করুন
> +25 ডিট্রেনিং ফিটনেসের ক্ষতি - লোড বৃদ্ধি করুন

JavaScript বাস্তবায়ন:

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

পাওয়ার-টু-ওয়েট এবং ক্লাইম্বিং মেট্রিক্স

৮. পাওয়ার-টু-ওয়েট রেশিও

ফর্মুলা:

W/kg = Power (watts) / Body Mass (kg)

FTP W/kg বেঞ্চমার্ক:

স্তর পুরুষ W/kg মহিলা W/kg বিভাগ
বিনোদনমূলক 2.5 - 3.5 2.0 - 3.0 ফিটনেস রাইডার
প্রতিযোগিতামূলক 3.5 - 4.5 3.0 - 4.0 ক্যাট ৩-৪, বয়স গ্রুপ রেসার
উন্নত 4.5 - 5.5 4.0 - 5.0 ক্যাট ১-২, শক্তিশালী অপেশাদার
এলিট অপেশাদার 5.5 - 6.0 5.0 - 5.5 জাতীয় স্তর
পেশাদার 6.0 - 7.0+ 5.5 - 6.5+ ওয়ার্ল্ড ট্যুর, গ্র্যান্ড ট্যুর 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 (Velocità Ascensionale Media)

ফর্মুলা:

VAM (m/h) = Elevation Gain (m) / Time (hours)

VAM বেঞ্চমার্ক:

VAM (m/h) স্তর উদাহরণ
600 - 900 বিনোদনমূলক স্থানীয় আরোহণে ক্লাব রাইডার
900 - 1200 প্রতিযোগিতামূলক আল্পে ডি'হুয়েজে ভালো অপেশাদার
1200 - 1500 এলিট অপেশাদার জাতীয়-স্তরের ক্লাইম্বার
1500 - 1800 পেশাদার ওয়ার্ল্ড ট্যুর ডোমেস্টিক
> 1800 গ্র্যান্ড ট্যুর বিজয়ী মূল আরোহণে Pogačar, Vingegaard

উদাহরণ গণনা:

পরিস্থিতি: আল্পে ডি'হুয়েজ আরোহণ

  • উচ্চতা লাভ: ১১০০ মিটার
  • সময়: ৫৫ মিনিট = 0.917 ঘণ্টা
  • 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 অনুমান

ফর্মুলা:

W/kg ≈ VAM (m/h) / 100 / (Gradient% + 3)

উদাহরণ গণনা:

পরিস্থিতি: ৮% গড় গ্রেডিয়েন্ট সহ আরোহণ, VAM = 1200 m/h

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

W/kg = 12 / 11 = 4.36 W/kg

ক্রস-চেক: ৭০kg রাইডার সহ → আরোহণে ৩০৫W টেকসই পাওয়ার

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

// Example:
const wkg = estimateWkgFromVAM(1200, 8);
// Returns: 4.36

অ্যারোডাইনামিক পাওয়ার ইকুয়েশন

১১. মোট পাওয়ার প্রয়োজনীয়তা

সম্পূর্ণ ফর্মুলা:

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²)
    • সাধারণ রোড বাইক হুডস: 0.35-0.40 m²
    • ড্রপস: 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²)

কাজের উদাহরণ (সমতল রোড TT):

পরিস্থিতি:

  • বেগ: 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

ব্যাখ্যা: সমতল রাস্তায় TT অবস্থানে 40 km/h বজায় রাখতে 221W প্রয়োজন

JavaScript বাস্তবায়ন:

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 }

হেল্পার ফাংশন

ইউনিট রূপান্তর ইউটিলিটি

JavaScript বাস্তবায়ন:

// 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)

বাস্তবায়ন সংস্থান

এই পৃষ্ঠার সমস্ত ফর্মুলা প্রোডাকশন-রেডি এবং বৈজ্ঞানিক সাহিত্য এবং বাস্তব-বিশ্ব পাওয়ার মিটার ডেটার বিরুদ্ধে যাচাই করা। কাস্টম অ্যানালিটিক্স টুলস, যাচাইকরণ, বা পাওয়ার-ভিত্তিক প্রশিক্ষণ গণনার গভীর বোঝার জন্য এগুলি ব্যবহার করুন।

💡 সেরা অনুশীলন

  • ইনপুট যাচাই করুন: যুক্তিসঙ্গত পাওয়ার পরিসর (০-২০০০W), ধনাত্মক সময়কালের জন্য চেক করুন
  • এজ কেস হ্যান্ডল করুন: শূন্য দ্বারা ভাগ, নাল/অনির্ধারিত ডেটা, অনুপস্থিত FTP
  • যথাযথভাবে রাউন্ড করুন: CTL/ATL/TSB ১ দশমিক পর্যন্ত, TSS পূর্ণসংখ্যায়, W/kg ২ দশমিক পর্যন্ত
  • নির্ভুলতা সংরক্ষণ করুন: ডাটাবেসে সম্পূর্ণ নির্ভুলতা রাখুন, শুধুমাত্র প্রদর্শনের জন্য রাউন্ড করুন
  • টাইম জোন: মাল্টি-ডে বিশ্লেষণের জন্য UTC বনাম স্থানীয় সময় সামঞ্জস্যপূর্ণভাবে হ্যান্ডল করুন
  • পাওয়ার মিটার ক্যালিব্রেশন: রাইডের আগে জিরো-অফসেট করতে ব্যবহারকারীদের স্মরণ করান
  • FTP যাচাইকরণ: সন্দেহজনক FTP মান ফ্ল্যাগ করুন (প্রাপ্তবয়স্কদের জন্য >৫০০W বা <১০০W)
  • পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন: গণনা যাচাই করতে পরিচিত-ভালো রাইড ফাইল ব্যবহার করুন