तकनीकी संदर्भ और फॉर्मूले

संपूर्ण गणितीय कार्यान्वयन

कार्यान्वयन गाइड

यह पेज सभी रन एनालिटिक्स मेट्रिक्स के लिए कॉपी-पेस्ट फॉर्मूले और चरण-दर-चरण गणना विधियाँ प्रदान करता है। कस्टम कार्यान्वयन, सत्यापन या गहरी समझ के लिए इनका उपयोग करें।

⚠️ कार्यान्वयन नोट्स

  • गणना के लिए सभी समय को सेकंड में परिवर्तित किया जाना चाहिए।
  • rTSS गणना इंटेंसिटी फैक्टर के वर्ग (IF²) का उपयोग करती है।
  • हमेशा उचित सीमाओं के लिए इनपुट सत्यापित करें।
  • एज केस (शून्य से विभाजन, नकारात्मक मान) को संभालें।

प्रमुख प्रदर्शन मेट्रिक्स

क्रिटिकल रन स्पीड (CRS)

फ़ॉर्मूला:

CRS (m/s) = (D₂ - D₁) / (T₂ - T₁)
CRS Pace (min/km) = 16.667 / CRS (m/s)

🧪 इंटरएक्टिव कैलकुलेटर - फ़ॉर्मूले का परीक्षण करें

CRS पेस (मि/किमी):
4:17
गणना के चरण:
CRS (m/s) = (3600 - 1200) / (900 - 270) = 3.81 m/s
पेस (मि/किमी) = 1000 / 3.81 = 262 सेकंड = 4:22

जावास्क्रिप्ट कार्यान्वयन:

function calculateCRS(distance1, time1, distance2, time2) {
  // समय को सेकंड में बदलें
  const t1 = typeof time1 === 'string' ? timeToSeconds(time1) : time1;
  const t2 = typeof time2 === 'string' ? timeToSeconds(time2) : time2;

  // m/s में CRS वेग की गणना करें
  const crs_ms = (distance2 - distance1) / (t2 - t1);

  // प्रति किमी पेस की गणना सेकंड में करें
  const pace_per_km = 1000 / crs_ms;

  // mm:ss फॉर्मेट में बदलें
  const minutes = Math.floor(pace_per_km / 60);
  const seconds = Math.round(pace_per_km % 60);

  return {
    velocity_ms: crs_ms,
    pace_seconds: pace_per_km,
    pace_formatted: `${minutes}:${seconds.toString().padStart(2, '0')}`
  };
}

रनिंग स्ट्रेस स्कोर (rTSS)

संपूर्ण फ़ॉर्मूला:

rTSS = (IF²) × Duration (hours) × 100
IF = NSS / Threshold Speed
NSS = Total Distance / Total Time (m/min)

🧪 इंटरएक्टिव कैलकुलेटर - फ़ॉर्मूले का परीक्षण करें

परिकलित rTSS:
31
गणना के चरण:
NSS = 5000m / 25min = 200 m/min
FTP = 1000 / (255/60) = 235.3 m/min
IF = 200 / 235.3 = 0.850
rTSS = 0.850² × (25/60) × 100 = 31

जावास्क्रिप्ट कार्यान्वयन:

function calculateRTSS(distance, timeMinutes, ftpMetersPerMin) {
  // नॉर्मलाइज़्ड रन स्पीड की गणना करें
  const nss = distance / timeMinutes;

  // इंटेंसिटी फैक्टर की गणना करें
  const intensityFactor = nss / ftpMetersPerMin;

  // घंटों की गणना करें
  const hours = timeMinutes / 60;

  // द्विघाती (quadratic) इंटेंसिटी फैक्टर का उपयोग करके rTSS की गणना करें
  const rtss = Math.pow(intensityFactor, 2) * hours * 100;

  return Math.round(rtss);
}

// उदाहरण उपयोग:
const rtss = calculateRTSS(3000, 55, 64.5);
// रिटर्न: 65

// हेल्पर: CRS पेस को रनिंग स्पीड (m/min) में बदलें
function crsPaceToSpeed(crsPacePerKmSeconds) {
  // m/min में स्पीड = 1000m / (मिनट में पेस)
  return 1000 / (crsPacePerKmSeconds / 60);
}

// उदाहरण: 4:15 (255 सेकंड) का CRS
const speed = crsPaceToSpeed(255); // रिटर्न: 235.3 m/min

बायोमैकेनिकल दक्षता: वर्टिकल रेश्यो

फ़ॉर्मूला:

Vertical Ratio (%) = (Vertical Oscillation ÷ Stride Length) × 100

🧪 इंटरएक्टिव कैलकुलेटर - फ़ॉर्मूले का परीक्षण करें

वर्टिकल रेश्यो:
7.4%
गणना:
वर्टिकल रेश्यो = (8.5 / 115) × 100 = 7.4%

जावास्क्रिप्ट कार्यान्वयन:

function calculateVerticalRatio(oscillationCm, strideLengthCm) {
  return (oscillationCm / strideLengthCm) * 100;
}

function calculateEfficiencyFactor(paceMetersPerMin, avgHeartRate) {
  return paceMetersPerMin / avgHeartRate;
}

दौड़ना स्ट्राइड मैकेनिक्स

स्ट्राइड रेट (SR)

फ़ॉर्मूला:

SR = 60 / Cycle Time (seconds)
SR = (Number of Strides / Time in seconds) × 60

🧪 इंटरएक्टिव कैलकुलेटर - फ़ॉर्मूले का परीक्षण करें

कैडेंस (SPM):
180
गणना:
कैडेंस = (180 / 60) × 60 = 180 SPM

जावास्क्रिप्ट कार्यान्वयन:

function calculateCadence(stepCount, timeSeconds) {
  return (stepCount / timeSeconds) * 60;
}

// उदाहरण:
const spm = calculateCadence(180, 60);
// रिटर्न: 180 SPM

स्ट्राइड लेंथ

फ़ॉर्मूला:

Stride Length = Distance / (Step Count / 2)
Stride Length = Velocity / (Cadence / 120)

जावास्क्रिप्ट कार्यान्वयन:

function calculateStrideLength(distanceMeters, stepCount) {
  // स्ट्राइड लेंथ दूरी / स्ट्राइड जोड़े (बाएं+दाएं) की संख्या है
  return distanceMeters / (stepCount / 2);
}

// उदाहरण (1000m, 800 कदम):
const strideLength = calculateStrideLength(1000, 800);
// रिटर्न: 2.50 मीटर प्रति स्ट्राइड

SR और DPS से वेग (Velocity)

फ़ॉर्मूला:

Velocity (m/s) = (SR / 60) × DPS

जावास्क्रिप्ट कार्यान्वयन:

function calculateVelocity(strideRate, dps) {
  return (strideRate / 60) * dps;
}

// उदाहरण:
const velocity = calculateVelocity(70, 1.6);
// रिटर्न: 1.87 m/s

स्ट्राइड इंडेक्स (SI)

फ़ॉर्मूला:

SI = Velocity (m/s) × DPS (m/stride)

जावास्क्रिप्ट कार्यान्वयन:

function calculateStrideIndex(velocity, dps) {
  return velocity * dps;
}

// उदाहरण:
const si = calculateStrideIndex(1.5, 1.7);
// रिटर्न: 2.55

परफॉर्मेंस मैनेजमेंट चार्ट (PMC) दौड़ने के लिए

CTL, ATL, TSB गणनाएँ

फ़ॉर्मूले:

CTL today = CTL yesterday + (TSS today - CTL yesterday) × (1/42)
ATL today = ATL yesterday + (TSS today - ATL yesterday) × (1/7)
TSB = CTL yesterday - ATL yesterday

जावास्क्रिप्ट कार्यान्वयन:

function updateCTL(previousCTL, todayTSS) {
  return previousCTL + (todayTSS - previousCTL) * (1/42);
}

function updateATL(previousATL, todayTSS) {
  return previousATL + (todayTSS - previousATL) * (1/7);
}

function calculateTSB(yesterdayCTL, yesterdayATL) {
  return yesterdayCTL - yesterdayATL;
}

// वर्कआउट की श्रृंखला के लिए PMC की गणना करें
function calculatePMC(workouts) {
  let ctl = 0, atl = 0;
  const results = [];

  workouts.forEach(workout => {
    ctl = updateCTL(ctl, workout.tss);
    atl = updateATL(atl, workout.tss);
    const tsb = calculateTSB(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
    });
  });

  return results;
}

// उदाहरण उपयोग:
const workouts = [
  { date: '2025-01-01', tss: 50 },
  { date: '2025-01-02', tss: 60 },
  { date: '2025-01-03', tss: 45 },
  // ... अधिक वर्कआउट
];

const pmc = calculatePMC(workouts);
// प्रत्येक दिन के लिए CTL, ATL, TSB के साथ ऐरे रिटर्न करता है

उन्नत गणनाएँ

एकाधिक दूरियों से CRS (रिग्रेशन विधि)

जावास्क्रिप्ट कार्यान्वयन:

function calculateCRSRegression(distances, times) {
  // लीनियर रिग्रेशन: distance = a + b*time
  const n = distances.length;
  const sumX = times.reduce((a, b) => a + b, 0);
  const sumY = distances.reduce((a, b) => a + b, 0);
  const sumXY = times.reduce((sum, x, i) => sum + x * distances[i], 0);
  const sumXX = times.reduce((sum, x) => sum + x * x, 0);

  const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
  const intercept = (sumY - slope * sumX) / n;

  return {
    crs: slope, // क्रिटिकल रनिंग वेग (m/s)
    anaerobic_capacity: intercept // एनारोबिक दूरी क्षमता (m)
  };
}

// कई परीक्षण दूरियों के साथ उदाहरण:
const distances = [100, 200, 400, 800];
const times = [65, 150, 340, 720]; // सेकंड में
const result = calculateCRSRegression(distances, times);
// रिटर्न: { crs: 1.18, anaerobic_capacity: 15.3 }

पेस से इंटेंसिटी फैक्टर

जावास्क्रिप्ट कार्यान्वयन:

function calculateIntensityFactor(actualPaceMinKm, thresholdPaceMinKm) {
  // यदि आवश्यक हो तो पेस स्ट्रिंग्स "mm:ss" को सेकंड में बदलें
  const actualSecs = typeof actualPaceMinKm === 'string' ? timeToSeconds(actualPaceMinKm) : actualPaceMinKm;
  const thresholdSecs = typeof thresholdPaceMinKm === 'string' ? timeToSeconds(thresholdPaceMinKm) : thresholdPaceMinKm;

  // IF = थ्रेशोल्ड पेस / एक्चुअल पेस (तेज़ पेस = कम सेकंड मान)
  return thresholdSecs / actualSecs;
}

// उदाहरण:
const if_value = calculateIntensityFactor("4:45", "4:15");
// रिटर्न: 0.895 (थ्रेशोल्ड के 89.5% पर दौड़ना)

पेस निरंतरता विश्लेषण (Pace Consistency Analysis)

जावास्क्रिप्ट कार्यान्वयन:

function analyzePaceConsistency(segments) {
  const paces = segments.map(kilometer => kilometer.distance / kilometer.time);
  const avgPace = paces.reduce((a, b) => a + b) / paces.length;

  const variance = paces.reduce((sum, pace) =>
    sum + Math.pow(pace - avgPace, 2), 0) / paces.length;
  const stdDev = Math.sqrt(variance);
  const coefficientOfVariation = (stdDev / avgPace) * 100;

  return {
    avgPace,
    stdDev,
    coefficientOfVariation,
    consistency: coefficientOfVariation < 5 ? "Excellent" :
                 coefficientOfVariation < 10 ? "Good" :
                 coefficientOfVariation < 15 ? "Moderate" : "Variable"
  };
}

// उदाहरण:
const segments = [
  { distance: 100, time: 70 },
  { distance: 100, time: 72 },
  { distance: 100, time: 71 },
  // ...
];
const analysis = analyzePaceConsistency(segments);
// रिटर्न: { avgPace: 1.41, stdDev: 0.02, coefficientOfVariation: 1.4, consistency: "Excellent" }

स्ट्राइड दक्षता से थकान का पता लगाना

जावास्क्रिप्ट कार्यान्वयन:

function detectFatigue(segments) {
  // पहले और अंतिम खंडों के वर्टिकल रेश्यो की तुलना करें
  const firstSegment = segments[0];
  const lastSegment = segments[segments.length - 1];

  const ratioIncrease = lastSegment.verticalRatio - firstSegment.verticalRatio;

  return {
    startRatio: firstSegment.verticalRatio,
    endRatio: lastSegment.verticalRatio,
    increase: Math.round(ratioIncrease * 10) / 10,
    fatigueLevel: ratioIncrease < 0.2 ? "Minimal" :
                  ratioIncrease < 0.5 ? "Moderate" :
                  ratioIncrease < 1.0 ? "Significant" : "Severe"
  };
}

// उदाहरण:
const segments = [
  { verticalRatio: 7.2 }, { verticalRatio: 7.3 }, { verticalRatio: 8.1 }
];
const fatigue = detectFatigue(segments);
// रिटर्न: { startRatio: 7.2, endRatio: 8.1, increase: 0.9, fatigueLevel: "Significant" }

डेटा सत्यापन (Data Validation)

वर्कआउट डेटा गुणवत्ता जांच

जावास्क्रिप्ट कार्यान्वयन:

function validateWorkoutData(workout) {
  const issues = [];

  // उचित पेस रेंज की जांच करें (3:00-8:00 प्रति किमी)
  const avgPaceSecs = workout.totalTime / (workout.totalDistance / 1000);
  if (avgPaceSecs < 180 || avgPaceSecs > 480) {
    issues.push(`असामान्य औसत पेस: ${Math.round(avgPaceSecs)}s प्रति किमी`);
  }

  // उचित वर्टिकल रेश्यो की जांच करें (4% - 15%)
  if (workout.avgVerticalRatio < 4 || workout.avgVerticalRatio > 15) {
    issues.push(`असामान्य वर्टिकल रेश्यो: ${workout.avgVerticalRatio}%`);
  }

  // उचित कैडेंस की जांच करें (120-220 SPM)
  const avgCadence = calculateCadence(workout.totalSteps, workout.totalTime);
  if (avgCadence < 120 || avgCadence > 220) {
    issues.push(`असामान्य कैडेंस: ${Math.round(avgCadence)} SPM`);
  }

  // गायब खंडों (समय में अंतराल) की जांच करें
  if (workout.segments && workout.segments.length > 1) {
    for (let i = 1; i < workout.segments.length; i++) {
      const gap = workout.segments[i].startTime -
                  (workout.segments[i-1].startTime + workout.segments[i-1].duration);
      if (gap > 300) { // 5 मिनट का अंतराल
        issues.push(`खंड ${i} और ${i+1} के बीच बड़ा अंतराल पाया गया`);
      }
    }
  }

  return {
    isValid: issues.length === 0,
    issues
  };
}

// उदाहरण:
const workout = {
  totalDistance: 2000,
  totalTime: 1800, // 30 मिनट
  totalStrides: 800,
  segments: [/* किलोमीटर डेटा */]
};
const validation = validateWorkoutData(workout);
// रिटर्न: { isValid: true, issues: [] }

हेल्पर फंक्शन

समय रूपांतरण उपयोगिताएँ

जावास्क्रिप्ट कार्यान्वयन:

// mm:ss को सेकंड में बदलें
function timeToSeconds(timeString) {
  const parts = timeString.split(':');
  return parseInt(parts[0]) * 60 + parseInt(parts[1]);
}

// सेकंड को mm:ss में बदलें
function secondsToTime(seconds) {
  const minutes = Math.floor(seconds / 60);
  const secs = Math.round(seconds % 60);
  return `${minutes}:${secs.toString().padStart(2, '0')}`;
}

// सेकंड को hh:mm:ss में बदलें
function secondsToTimeDetailed(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')}`;
}

// उदाहरण:
timeToSeconds("1:33"); // रिटर्न: 93
secondsToTime(93); // रिटर्न: "1:33"
secondsToTimeDetailed(3665); // रिटर्न: "1:01:05"

कार्यान्वयन संसाधन

इस पेज के सभी फॉर्मूले उत्पादन के लिए तैयार हैं और वैज्ञानिक साहित्य के आधार पर मान्य हैं। कस्टम एनालिटिक्स टूल, सत्यापन या रनिंग परफॉर्मेंस गणनाओं की गहरी समझ के लिए इनका उपयोग करें।

💡 सर्वोत्तम अभ्यास

  • इनपुट सत्यापित करें: गणना करने से पहले उचित श्रेणियों की जांच करें।
  • एज केस संभालें: शून्य से विभाजन, नकारात्मक मान, खाली डेटा।
  • उचित रूप से राउंड करें: CTL/ATL/TSB को 1 दशमलव तक, rTSS को पूर्णांक (integer) तक।
  • परिशुद्धता (Precision) बनाए रखें: डेटाबेस में पूर्ण परिशुद्धता रखें, प्रदर्शन के लिए राउंड करें।
  • पूरी तरह से परीक्षण करें: गणनाओं को सत्यापित करने के लिए ज्ञात-अच्छे डेटा का उपयोग करें।