تکنیکی حوالہ جات اور فارمولے

مکمل ریاضیاتی نفاذ

نفاذ کی رہنمائی

یہ صفحہ تمام Run Analytics میٹرکس کے لیے کاپی پیسٹ فارمولے اور قدم بہ قدم حساب کتاب کے طریقے فراہم کرتا ہے۔ ان کو حسب ضرورت نفاذ، تصدیق، یا گہری سمجھ کے لیے استعمال کریں۔

⚠️ نفاذ کی یادداشتیں

  • تمام اوقات کو حساب کتاب کے لیے سیکنڈز میں تبدیل کیا جانا چاہیے
  • دوڑنے کی رفتار الٹی ہے (زیادہ % = سست رفتار)
  • ہمیشہ معقول حدود کے لیے ان پٹس کی توثیق کریں
  • کنارے کے معاملات سنبھالیں (صفر سے تقسیم، منفی اقدار)

بنیادی کارکردگی کی پیمائشیں

کریٹیکل رن سپیڈ (CRS)

فارمولہ:

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

🧪 انٹرایکٹو کیلکولیٹر - فارمولہ جانچیں

CRS پیس (min/km):
4:17
حساب کتاب کے مراحل:
CRS (m/s) = (3600 - 1200) / (900 - 270) = 3.81 m/s
Pace (min/km) = 1000 / 3.81 = 262 seconds = 4:22

JavaScript نفاذ:

function calculateCRS(distance1, time1, distance2, time2) {
  // Convert times to seconds if needed
  const t1 = typeof time1 === 'string' ? timeToSeconds(time1) : time1;
  const t2 = typeof time2 === 'string' ? timeToSeconds(time2) : time2;

  // Calculate CRS velocity in m/s
  const crs_ms = (distance2 - distance1) / (t2 - t1);

  // Calculate pace per km in seconds
  const pace_per_km = 1000 / crs_ms;

  // Convert to mm:ss format
  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')}`
  };
}

رن ٹریننگ سٹریس سکور (sTSS)

مکمل فارمولہ:

sTSS = (IF³) × Duration (hours) × 100
IF = NSS / تھریش ہولڈ سپیڈ
NSS = Total Distance / Total Time (m/min)

🧪 انٹرایکٹو کیلکولیٹر - فارمولہ جانچیں

محسوب شدہ sTSS:
26
حساب کتاب کے مراحل:
NSS = 5000m / 400min = 200.0 m/min
تھریش ہولڈ سپیڈ = 1000 / (255/60) = 235.3 m/min
IF = 200.0 / 235.3 = 0.850
sTSS = 0.850³ × (25/60) × 100 = 26

JavaScript نفاذ:

function calculateSTSS(distance, timeMinutes, ftpMetersPerMin) {
  // Calculate Normalized Run Speed
  const nss = distance / timeMinutes;

  // Calculate Intensity Factor
  const intensityFactor = nss / ftpMetersPerMin;

  // Calculate hours
  const hours = timeMinutes / 60;

  // Calculate sTSS using cubed intensity factor
  const stss = Math.pow(intensityFactor, 3) * hours * 100;

  return Math.round(stss);
}

// Example usage:
const stss = calculateSTSS(5000, 25, 235.3);
// Returns: 25

// Helper: Convert CRS Pace to Running Speed (m/min)
function crsPaceToSpeed(crsPacePerKmSeconds) {
  // Speed in m/min = 1000m / (pace in minutes)
  return 1000 / (crsPacePerKmSeconds / 60);
}

// Example: CRS of 4:15 (255 seconds)
const speed = crsPaceToSpeed(255); // Returns: 235.3 m/min

بایومیکینکل ایفیشنسی: ورٹیکل ریشو

فارمولہ:

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

🧪 انٹرایکٹو کیلکولیٹر - فارمولہ جانچیں

ورٹیکل ریشو:
7.4%
حساب کتاب:
Vertical Ratio = (8.5 / 115) × 100 = 7.4%

JavaScript نفاذ:

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

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

چل رہا ہے۔ قدموں کی میکینکس

اسٹرائیڈ ریٹ (Cadence)

فارمولہ:

Stride Time (seconds) = 60 / Cadence
Cadence (SPM) = (Number of Steps / Time in seconds) × 60

🧪 انٹرایکٹو کیلکولیٹر - فارمولہ جانچیں

کیڈنس (SPM):
180
حساب کتاب:
Cadence = (180 / 60) × 60 = 180 SPM

JavaScript نفاذ:

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

// Example:
const spm = calculateCadence(180, 60);
// Returns: 180 SPM

اسٹرائیڈ کی لمبائی

فارمولہ:

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

JavaScript نفاذ:

function calculateStrideLength(distanceMeters, stepCount) {
  // Stride length is distance / number of stride pairs (left+right)
  return distanceMeters / (stepCount / 2);
}

// Example (1000m, 800 steps):
const strideLength = calculateStrideLength(1000, 800);
// Returns: 2.50 meters per stride

کیڈنس اور اسٹرائیڈ کی لمبائی سے رفتار

فارمولہ:

Velocity (m/s) = (Cadence / 60) × Stride Length

JavaScript نفاذ:

function calculateVelocity(cadence, strideLength) {
  return (cadence / 60) * strideLength;
}

// Example:
// 180 SPM with 1.4m stride length
const velocity = calculateVelocity(180, 1.4);
// Returns: 4.2 m/s

اسٹرائیڈ انڈیکس (SI)

فارمولہ:

SI = Velocity (m/s) × Stride Length (m/stride)

JavaScript نفاذ:

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

// Example:
// 4.0 m/s with 1.5m stride length
const si = calculateStrideIndex(4.0, 1.5);
// Returns: 6.00

پرفارمنس مینجمنٹ چارٹ (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

JavaScript نفاذ:

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;
}

// Calculate PMC for series of workouts
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;
}

// Example usage:
const workouts = [
  { date: '2025-01-01', tss: 50 },
  { date: '2025-01-02', tss: 60 },
  { date: '2025-01-03', tss: 45 },
  // ... more workouts
];

const pmc = calculatePMC(workouts);
// Returns array with CTL, ATL, TSB for each day

جدید حساب کتاب

متعدد فاصلوں سے CRS (ریگریشن طریقہ)

JavaScript نفاذ:

function calculateCRSRegression(distances, times) {
  // Linear regression: 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, // Critical running velocity (m/s)
    anaerobic_capacity: intercept // Anaerobic distance capacity (m)
  };
}

// Example with multiple test distances:
const distances = [100, 200, 400, 800];
const times = [65, 150, 340, 720]; // in seconds
const result = calculateCRSRegression(distances, times);
// Returns: { crs: 4.2, anaerobic_capacity: 50.5 }

پیس سے انٹینسٹی فیکٹر

JavaScript نفاذ:

function calculateIntensityFactor(actualPaceMinKm, thresholdPaceMinKm) {
  // Convert pace strings "mm:ss" to seconds if necessary
  const actualSecs = typeof actualPaceMinKm === 'string' ? timeToSeconds(actualPaceMinKm) : actualPaceMinKm;
  const thresholdSecs = typeof thresholdPaceMinKm === 'string' ? timeToSeconds(thresholdPaceMinKm) : thresholdPaceMinKm;

  // IF is Threshold Pace / Actual Pace (faster pace = smaller seconds value)
  return thresholdSecs / actualSecs;
}

// Example:
const if_value = calculateIntensityFactor("4:45", "4:15");
// Returns: 0.895 (running at 89.5% of threshold)

پیس کی مستقل مزاجی کا تجزیہ

JavaScript نفاذ:

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"
  };
}

// Example:
const segments = [
  { distance: 100, time: 70 },
  { distance: 100, time: 72 },
  { distance: 100, time: 71 },
  // ...
];
const analysis = analyzePaceConsistency(segments);
// Returns: { avgPace: 1.41, stdDev: 0.02, coefficientOfVariation: 1.4, consistency: "Excellent" }

اسٹرائیڈ ایفیشنسی سے تھکاوٹ کا پتہ لگانا

JavaScript نفاذ:

function detectFatigue(segments) {
  // Compare Vertical Ratio of first and last 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"
  };
}

// Example:
const segments = [
  { verticalRatio: 7.2 }, { verticalRatio: 7.3 }, { verticalRatio: 8.1 }
];
const fatigue = detectFatigue(segments);
// Returns: { startRatio: 7.2, endRatio: 8.1, increase: 0.9, fatigueLevel: "Significant" }

ڈیٹا کی توثیق

ورکآؤٹ ڈیٹا کوالٹی چیکس

JavaScript نفاذ:

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

  // Check for reasonable pace ranges (3:00-8:00 per km)
  const avgPaceSecs = workout.totalTime / (workout.totalDistance / 1000);
  if (avgPaceSecs < 180 || avgPaceSecs > 480) {
    issues.push(`Unusual average pace: ${Math.round(avgPaceSecs)}s per km`);
  }

  // Check for reasonable Vertical Ratio (4% - 15%)
  if (workout.avgVerticalRatio < 4 || workout.avgVerticalRatio > 15) {
    issues.push(`Unusual Vertical Ratio: ${workout.avgVerticalRatio}%`);
  }

  // Check for reasonable cadence (120-220 SPM)
  const avgCadence = calculateCadence(workout.totalSteps, workout.totalTime);
  if (avgCadence < 120 || avgCadence > 220) {
    issues.push(`Unusual cadence: ${Math.round(avgCadence)} SPM`);
  }

  // Check for missing segments (gaps in time)
  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 minute gap
        issues.push(`Large gap detected between segments ${i} and ${i+1}`);
      }
    }
  }

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

// Example:
const workout = {
  totalDistance: 2000,
  totalTime: 1800, // 30 minutes
  totalStrides: 800,
  segments: [/* kilometer data */]
};
const validation = validateWorkoutData(workout);
// Returns: { isValid: true, issues: [] }

مددگار فنکشنز

وقت کی تبدیلی کی افادیت

JavaScript نفاذ:

// Convert mm:ss to seconds
function timeToSeconds(timeString) {
  const parts = timeString.split(':');
  return parseInt(parts[0]) * 60 + parseInt(parts[1]);
}

// Convert seconds to mm:ss
function secondsToTime(seconds) {
  const minutes = Math.floor(seconds / 60);
  const secs = Math.round(seconds % 60);
  return `${minutes}:${secs.toString().padStart(2, '0')}`;
}