Référence technique et formules

Implémentation mathématique complète

Guide de mise en œuvre

Cette page fournit des formules de copieur-coller et des méthodes de calcul étape par étape pour toutes les mesures Run Analytics. Utilisez-les pour des implémentations personnalisées, une vérification ou une compréhension plus approfondie.

⚠️ Notes de mise en œuvre

  • Tous les temps doivent être convertis en secondes pour les calculs
  • Le rythme de course est inversé (% plus élevé = rythme plus lent)
  • Validez toujours les entrées pour des plages raisonnables
  • Gérer les cas extrêmes (division par zéro, valeurs négatives)

Indicateurs de performance de base

Vitesse d'exécution critique (CRS)

Formules :

CRS (m/s) = (D₂ - D₁) / (T₂ - T₁)
CRS Allure/100 m (secondes) = (T₄₀₀ - T₂₀₀) / 2

🧪 Calculatrice interactive - Testez la formule

CRS Allure par 100 m :
1:49
Étapes de calcul :
CRS (m/s) = (400 - 200) / (368 - 150) = 0,917 m/s
Allure/100 m = 100 / 0,917 = 109 secondes = 1:49

Implémentation JavaScript :

fonction calculerCRS (distance1, temps1, distance2, temps2) {
  // Convertir les temps en secondes IF nécessaire
  const t1 = type de temps1 === 'string' ? timeToSeconds(time1) : time1;
  const t2 = typeof time2 === 'string' ? timeToSeconds(time2) : time2;

  // Calculer CRS en m/s
  const css_ms = (distance2 - distance1) / (t2 - t1);

  // Calculer le rythme par 100 m en secondes
  const pace_per_100m = 100 / css_ms ;

  // Convertir au format mm:ss
  const minutes = Math.floor(pace_per_100m / 60);
  const secondes = Math.round(pace_per_100m % 60);

  retourner {
    css_ms : css_ms,
    rythme_secondes : rythme_per_100m,
    Pace_formatted : `${minutes}:${seconds.toString().padStart(2, '0')}`
  } ;
}

// Exemple d'utilisation :
résultat const = calculerCRS(200, 150, 400, 368);
// Renvoie : { css_ms : 0,917, rythme_secondes : 109, rythme_formatté : "1:49" }

Score de stress d'entraînement à la course à pied (rTSS)

Formule complète :

rTSS = (IF²) × Durée (heures) × 100
IF = NSS / FTP
NSS = Distance totale / Temps total (m/min)

🧪 Calculatrice interactive - Testez la formule

rTSS calculé :
65
Étapes de calcul :
NSS = 3 000 m / 55 min = 54,5 m/min
FTP = 100 / (93/60) = 64,5 m/min
IF = 54,5 / 64,5 = 0,845
rTSS = 0,845² × (55/60) × 100 = 65

Implémentation JavaScript :

fonction calculateRTSS (distance, timeMinutes, ftpMetersPerMin) {
  // Calculer la vitesse d'exécution normalisée
  const nss = distance / tempsMinutes ;

  // Calculer le facteur d'intensité
  const IntensityFactor = nss / ftpMetersPerMin ;

  // Calculer les heures
  heures const = timeMinutes / 60 ;

  // Calculez rTSS en utilisant le facteur d'intensité au carré
  const rTSS = Math.pow(intensityFactor, 2) * heures * 100 ;

  retourner Math.round(rTSS);
}

// Exemple d'utilisation :
const rTSS = calculerSTSS(3000, 55, 64,5);
// Renvoie : 55

// Aide : Convertir CRS en FTP
fonction cssToFTP (crsPacePer100mSeconds) {
  // FTP en m/min = 100m / (allure en minutes)
  renvoyer 100 / (crsPacePer100mSeconds / 60) ;
}

// Exemple : CRS de 1:33 (93 secondes)
const FTP = cssVersFTP(93); // Retours : 64,5 m/min

Efficacité de fonctionnement

Formules :

Efficacité de course = temps kilométrique (secondes) + nombre de foulées
Efficacité de course₂₅ = (Temps × 25/longueur de la piste) + (foulées × 25/longueur de la piste) piste)

🧪 Calculatrice interactive - Testez la formule

Score d'efficacité de fonctionnement :
35
Calculer :
Efficacité de course = 20 s + 15 foulées = 35

Implémentation JavaScript :

function calculaterTSS Calculation (timeSeconds, strideCount) {
  retourner timeSeconds + strideCount ;
}

function calculateNormalizedrTSS Calculation (timeSeconds, strideCount, trackLength) {
  const normalizedTime = timeSeconds * (25 / trackLength);
  const normalizedStrides = strideCount * (25 / trackLength);
  return normalizedTime + normalizedStrides ;
}

// Exemple :
const rtss = calculer l'efficacité de fonctionnement (20, 15);
// Renvoie : 35

const rtss400m = calculer l'efficacité de fonctionnement normale (40, 30, 50);
// Renvoie : 35 (normalisé à 25 m)

En cours d'exécution Mécanique de foulée

Fréquence de foulée (SR)

Formules :

SR = 60 / Temps de cycle (secondes)
SR = (Nombre de foulées / Temps en secondes) × 60

🧪 Calculatrice interactive - Testez la formule

Fréquence de foulée (SPM) :
72
Calculer :
SR = (30/25) × 60 = 72 SPM

Implémentation JavaScript :

fonction calculateStrideRate (strideCount, timeSeconds) {
  return (strideCount / timeSeconds) * 60 ;
}

// Exemple :
const sr = calculateStrideRate(30, 25);
// Renvoie : 72 SPM

Distance par foulée (DPS)

Formules :

DPS = Distance / Nombre de foulées
DPS = Distance / (SR / 60)

Implémentation JavaScript :

fonction calculateDPS (distance, strideCount, pushoffDistance = 0) {
  const effectiveDistance = distance - pushoffDistance ;
  retourner effectiveDistance / strideCount ;
}

// Exemple (piste de 25 m, poussée de 5 m) :
const dps = calculerDPS(25, 12, 5);
// Retours : 1,67 m/foulée

// Pour plusieurs segments :
const dps100m = calculerDPS(100, 48, 4 * 5);
// Retours : 1,67 m/foulée (4 segments × poussée de 5 m)

Vitesse de SR et DPS

Formules :

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

Implémentation JavaScript :

fonction calculerVelocity(strideRate, dps) {
  retour (strideRate / 60) * dps ;
}

// Exemple :
vitesse const = calculateVelocity(70, 1.6);
// Retours : 1,87 m/s

Indice de faute (SI)

Formules :

SI = Vitesse (m/s) × DPS (m/foulée)

Implémentation JavaScript :

fonction calculateStrideIndex (vitesse, dps) {
  vitesse de retour * dps ;
}

// Exemple :
const si = calculateStrideIndex(1.5, 1.7);
// Renvoie : 2,55

Tableau de gestion des performances (PMC) pour courir

Calculs CTL, ATL, TSB

Formules :

CTL aujourd'hui = CTL hier + (TSS aujourd'hui - CTL hier) × (1/42)
ATL aujourd'hui = ATL hier + (TSS aujourd'hui - ATL hier) × (1/7)
TSB = CTL ici - ATL ici

Implémentation JavaScript :

fonction updateCTL (previousCTL, aujourd'huiTSS) {
  return previousCTL + (aujourd'huiTSS - previousCTL) * (1/42);
}

fonction updateATL (précédentATL, aujourd'huiTSS) {
  return previousATL + (aujourd'huiTSS - previousATL) * (1/7);
}

fonction calculateTSB (hierCTL, hierATL) {
  retourner hierCTL - hierATL ;
}

// Calculez PMC pour une série d'entraînements
fonction calculerPMC (entraînements) {
  soit CTL = 0, ATL = 0 ;
  const résultats = [];

  workouts.forEach(workout => {
    CTL = updateCTL(CTL, workout.TSS);
    ATL = updateATL(ATL, entraînement.TSS);
    const TSB = calculateTSB(CTL, ATL);

    résultats.push({
      date : entraînement.date,
      TSS : entraînement.TSS,
      CTL : Math.round(CTL * 10) / 10,
      ATL : Math.round(ATL * 10) / 10,
      TSB : Math.round(TSB * 10) / 10
    });
  });

  renvoyer les résultats ;
}

// Exemple d'utilisation :
const entraînements = [
  {date : '2025-01-01', TSS : 50 },
  {date : '02/01/2025', TSS : 60 },
  {date : '03/01/2025', TSS : 45 },
  // ... plus d'entraînements
];

const PMC = calculatePMC (entraînements);
// Renvoie un tableau avec CTL, ATL, TSB pour chaque jour

Calculs avancés

CRS à partir de plusieurs distances (méthode de régression)

Implémentation JavaScript :

fonction calculerCRSRegression (distances, temps) {
  // Régression linéaire : distance = a + b*temps
  const n = distances.longueur ;
  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 pente = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX) ;
  const intercept = (sumY - pente * sumX) / n;

  retourner {
    css : pente, // Vitesse de course critique (m/s)
    anaerobic_capacity : interception // Capacité de distance anaérobie (m)
  } ;
}

// Exemple avec plusieurs distances de test :
distances constantes = [100, 200, 400, 800] ;
const fois = [65, 150, 340, 720] ; // en secondes
résultat const = calculateCRSRegression (distances, temps);
// Renvoie : { css : 1,18, capacité_anaérobie : 15,3 }

Facteur d'intensité du rythme

Implémentation JavaScript :

fonction calculateIntensityFactor (actualPace100m, seuilPace100m) {
  // Convertit l'allure en vitesse (m/s)
  const actualSpeed = 100 / actualPace100m ;
  const seuilVitesse = 100 / seuilPace100m ;
  renvoie la vitesse réelle / la vitesse seuil ;
}

// Exemple :
const if_value = calculateIntensityFactor(110, 93);
// Renvoie : 0,845 (à 84,5 % du seuil)

Analyse de la cohérence du rythme

Implémentation JavaScript :

fonction analysePaceConsistency (segments) {
  const Paces = segments.map(kilometer => kilometer.distance / kilometer.time);
  const avgPace = Paces.reduce((a, b) => a + b) / Paces.length;

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

  retourner {
    rythme moyen,
    développement standard,
    coefficientDeVariation,
    cohérence : coefficientOfVariation < 5 ? "Excellent" :
                 coefficientOfVariation < 10 ? "Bien" :
                 coefficientOfVariation < 15 ? "Modéré" : "Variable"
  } ;
}

// Exemple :
segments const = [
  { distance : 100, temps : 70 },
  { distance : 100, temps : 72 },
  { distance : 100, temps : 71 },
  //...
];
const analyse = analysePaceConsistency(segments);
// Renvoie : { avgPace : 1,41, stdDev : 0,02, coefficientOfVariation : 1,4, cohérence : "Excellent" }

Détection de la fatigue à partir du nombre de foulées

Implémentation JavaScript :

fonction détecterFatigue (segments) {
  const firstThird = segments.slice(0, Math.floor(segments.length/3));
  const lastThird = segments.slice(-Math.floor(segments.length/3));

  const firstThirdAvg = firstThird.reduce((somme, kilomètre) =>
    somme + kilomètre.strideCount, 0) / firstThird.length ;
  const lastThirdAvg = lastThird.reduce((somme, kilomètre) =>
    somme + kilomètre.strideCount, 0) / lastThird.length ;

  const strideCountIncrease = ((lastThirdAvg - firstThirdAvg) / firstThirdAvg) * 100;

  retourner {
    firstThirdAvg : Math.round(firstThirdAvg * 10) / 10,
    lastThirdAvg : Math.round(lastThirdAvg * 10) / 10,
    percentIncrease : Math.round(strideCountIncrease * 10) / 10,
    fatigueLevel : strideCountIncrease < 5 ? "Minime" :
                  strideCountIncrease < 10 ? "Modéré" :
                  strideCountIncrease < 20 ? "Important" : "Sévère"
  } ;
}

// Exemple :
segments const = [
  { strideCount : 14 }, { strideCount : 14 }, { strideCount : 15 },
  { strideCount : 15 }, { strideCount : 16 }, { strideCount : 16 },
  { strideCount : 17 }, { strideCount : 18 }, { strideCount : 18 }
];
const fatigue = détecterFatigue(segments);
// Renvoie : { firstThirdAvg : 14,3, lastThirdAvg : 17,7, percentIncrease : 23,8, fatigueLevel : "Severe" }

Validation des données

Contrôles de qualité des données d'entraînement

Implémentation JavaScript :

fonction validateWorkoutData (entraînement) {
  problèmes const = [];

  // Vérifiez les plages de rythme raisonnables (1h00-5h00 par 100 m)
  const avgPace = (workout.totalTime / workout.totalDistance) * 100 ;
  IF (allure moyenne < 60 || allure moyenne > 300) {
    issues.push(`Rythme moyen inhabituel : ${Math.round(avgPace)}s par 100 m`);
  }

  // Vérifiez le nombre de foulées raisonnable (10-50 par 25 m)
  const avgStridesPer400m = (workout.totalStrides / workout.totalDistance) * 25 ;
  IF (avgStridesPer400m < 10 || avgStridesPer400m > 50) {
    issues.push(`Nombre de foulées inhabituelles : ${Math.round(avgStridesPer400m)} par 25 m`);
  }

  // Vérifiez une fréquence de foulée raisonnable (30-150 SPM)
  const avgSR = calculateStrideRate(workout.totalStrides, workout.totalTime);
  IF (moySR < 30 || moySR > 150) {
    issues.push(`Tréquence de foulée inhabituelle : ${Math.round(avgSR)} SPM`);
  }

  // Vérification des segments manquants (intervalles de temps)
  IF (workout.segments && workout.segments.length > 1) {
    pour (soit i = 1; i < workout.segments.length; i++) {
      const écart = entraînement.segments[i].startTime -
                  (workout.segments[i-1].startTime + workout.segments[i-1].duration);
      IF (écart > 300) { // intervalle de 5 minutes
        issues.push(`Grand écart détecté entre les segments ${i} et ${i+1}`);
      }
    }
  }

  retourner {
    isValid : issues.length === 0,
    problèmes
  } ;
}

// Exemple :
const entraînement = {
  Distance totale: 2000,
  durée totale : 1 800, // 30 minutes
  foulées totales : 800,
  segments : [/* données kilométriques */]
} ;
const validation = validateWorkoutData(workout);
// Renvoie : { isValid : true, issues : [] }

Fonctions d'assistance

Utilitaires de conversion de temps

Implémentation JavaScript :

// Convertit mm:ss en secondes
fonction timeToSeconds (timeString) {
  const parts = timeString.split(':');
  return parseInt(parts[0]) * 60 + parseInt(parts[1]);
}

// Convertit les secondes en mm:ss
fonction secondesVersTemps(secondes) {
  const minutes = Math.floor(secondes / 60);
  const secs = Math.round(secondes % 60);
  return `${minutes}:${secs.toString().padStart(2, '0')}` ;
}

// Convertit les secondes en hh:mm:ss
fonction secondesToTimeDetailed(secondes) {
  heures const = Math.floor(secondes / 3600);
  const minutes = Math.floor((secondes % 3600) / 60);
  const secs = Math.round(secondes % 60);
  return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
}

// Exemples :
timeToSeconds("1:33"); // Renvoie : 93
secondesVersTemps(93); // Renvoie : "1:33"
secondesToTimeDetailed(3665); // Renvoie : "1:01:05"

Ressources de mise en œuvre

Toutes les formules de cette page sont prêtes pour la production et validées par la littérature scientifique. Utilisez-les pour des outils d'analyse personnalisés, une vérification ou une compréhension plus approfondie des calculs de performances en cours d'exécution.

💡 Meilleures pratiques

  • Validez les entrées :Vérifiez les plages raisonnables avant de calculer
  • Gérer les cas extrêmes :Division par zéro, valeurs négatives, données nulles
  • Arrondissez-vous :CTL/ATL/TSB à 1 décimale, rTSS à un entier
  • Précision du magasin :Conserver une précision totale dans la base de données, arrondir pour l'affichage
  • Testez minutieusement :Utiliser des données connues pour vérifier les calculs

Revu par un expert:

Ce contenu a été rédigé et revu par un expert en analyse de données sportives pour garantir sa précision technique.

Référence technique et formules

Implémentation mathématique complète. Référence technique et formules Référence technique et formules

  • 2026-03-18
  • formules natation · formule CRS · calcul TSS · métriques natation · Javascript
  • Bibliographie