Referência técnica e fórmulas
Implementação matemática completa (copiar e colar)
Guia de implementação
Fórmulas e passos de cálculo para todas as métricas do Run Analytics. Use para implementar, validar ou entender em profundidade.
⚠️ Notas
- Converta tempos para segundos antes de calcular
- Ritmo é inverso (percentual maior = ritmo mais lento)
- Valide faixas de entrada e trate divisões por zero
- Mantenha precisão em floats ao lidar com tempos curtos
Métricas de performance
Velocidade Crítica de Corrida (VCC/CRS)
Fórmula
VCC (m/s) = (D₂ - D₁) / (T₂ - T₁)
Ritmo por 100m (s) = (T₄₀₀ - T₂₀₀) / 2
JavaScript
function calculateCRS(distance1, time1, distance2, time2) {
const t1 = typeof time1 === 'string' ? timeToSeconds(time1) : time1;
const t2 = typeof time2 === 'string' ? timeToSeconds(time2) : time2;
const css_ms = (distance2 - distance1) / (t2 - t1);
const pace100 = 100 / css_ms;
return { css_ms, pace_seconds: pace100, pace_formatted: secondsToTime(pace100) };
}
rTSS (Running Training Stress Score)
IF = Ritmo de limiar / Ritmo médio
rTSS = (IF²) × Duração (horas) × 100
Nota: Ritmo mais lento → IF menor (inverso de velocidade).
JavaScript
function calculateRTSS(thresholdPaceSecPerKm, avgPaceSecPerKm, durationSeconds) {
const IF = thresholdPaceSecPerKm / avgPaceSecPerKm;
const hours = durationSeconds / 3600;
return IF * IF * hours * 100;
}
CTL / ATL / TSB (PMC)
CTLₙ = CTLₙ₋₁ + (TSSₙ - CTLₙ₋₁) × (1 / τCTL)
ATLₙ = ATLₙ₋₁ + (TSSₙ - ATLₙ₋₁) × (1 / τATL)
TSBₙ = CTLₙ₋₁ - ATLₙ₋₁
Constantes: τCTL=42 dias, τATL=7 dias (padrão enduro).
JavaScript
function ema(prev, value, tau) {
return prev + (value - prev) * (1 / tau);
}
function nextCTL(prevCTL, todayTSS, tauCTL = 42) {
return ema(prevCTL, todayTSS, tauCTL);
}
function nextATL(prevATL, todayTSS, tauATL = 7) {
return ema(prevATL, todayTSS, tauATL);
}
function tsb(yesterdayCTL, yesterdayATL) {
return yesterdayCTL - yesterdayATL;
}
Running Efficiency (RE)
RE = Ritmo (s/100m) + FC média
Menor é melhor (menos segundos + menor FC = mais eficiência).
Cadência e comprimento de passada
Cadência (passos/min) = (Passos × 60) / Duração (s)
Passos por km = (Passos × 1000) / Distância (m)
Comprimento da passada (m) = Distância / Passos
Relação vertical = Oscilação vertical / Comprimento da passada
Conversões de ritmo e velocidade
Velocidade (km/h) = 3600 / Ritmo (s/km)
Ritmo (s/km) = 3600 / Velocidade (km/h)
function paceToSpeed(paceSecondsPerKm) {
return 3600 / paceSecondsPerKm; // km/h
}
function speedToPace(speedKmh) {
return 3600 / speedKmh; // seconds per km
}
Utilitários de tempo
function timeToSeconds(timeString) {
const [m, s] = timeString.split(':').map(Number);
return m * 60 + s;
}
function secondsToTime(seconds) {
const minutes = Math.floor(seconds / 60);
const secs = Math.round(seconds % 60);
return `${minutes}:${secs.toString().padStart(2, '0')}`;
}
Adapte para horas se precisar (hh:mm:ss → horas = hh + mm/60 + ss/3600).
Campos comuns em planilhas
- Duração (h): =SEGUNDOS/3600
- IF (ritmo): =Ritmo_Limiar / Ritmo_Médio
- rTSS: =(IF^2)*Duração_h*100
- CTL: =CTL_prev + (TSS - CTL_prev)/42
- ATL: =ATL_prev + (TSS - ATL_prev)/7
- TSB: =CTL_prev - ATL_prev