Referência Técnica e Fórmulas
Implementação Matemática Completa
Guia de Implementação
Esta página fornece fórmulas prontas para copiar e métodos de cálculo passo a passo para todas as métricas do Swim Analytics. Use para implementações personalizadas, verificação ou compreensão mais profunda.
⚠️ Notas de Implementação
- Todos os tempos devem ser convertidos para segundos para cálculos
- Pace de natação é inverso (% maior = pace mais lento)
- Sempre valide entradas para faixas razoáveis
- Trate casos extremos (divisão por zero, valores negativos)
Métricas Principais de Desempenho
Critical Swim Speed (CSS)
Fórmula:
CSS (m/s) = (D₂ - D₁) / (T₂ - T₁)
CSS Pace/100m (segundos) = (T₄₀₀ - T₂₀₀) / 2
Implementação JavaScript:
function calculateCSS(distance1, time1, distance2, time2) {
// Converter tempos para segundos se necessário
const t1 = typeof time1 === 'string' ? timeToSeconds(time1) : time1;
const t2 = typeof time2 === 'string' ? timeToSeconds(time2) : time2;
// Calcular CSS em m/s
const css_ms = (distance2 - distance1) / (t2 - t1);
// Calcular pace por 100m em segundos
const pace_per_100m = 100 / css_ms;
// Converter para formato mm:ss
const minutes = Math.floor(pace_per_100m / 60);
const seconds = Math.round(pace_per_100m % 60);
return {
css_ms: css_ms,
pace_seconds: pace_per_100m,
pace_formatted: `${minutes}:${seconds.toString().padStart(2, '0')}`
};
}
// Exemplo de uso:
const result = calculateCSS(200, 150, 400, 368);
// Retorna: { css_ms: 0.917, pace_seconds: 109, pace_formatted: "1:49" }
Swim Training Stress Score (sTSS)
Fórmula Completa:
sTSS = (IF³) × Duração (horas) × 100
IF = NSS / FTP
NSS = Distância Total / Tempo Total (m/min)
Implementação JavaScript:
function calculateSTSS(distance, timeMinutes, ftpMetersPerMin) {
// Calcular Velocidade Normalizada de Natação
const nss = distance / timeMinutes;
// Calcular Fator de Intensidade
const intensityFactor = nss / ftpMetersPerMin;
// Calcular horas
const hours = timeMinutes / 60;
// Calcular sTSS usando fator de intensidade ao cubo
const stss = Math.pow(intensityFactor, 3) * hours * 100;
return Math.round(stss);
}
// Exemplo de uso:
const stss = calculateSTSS(3000, 55, 64.5);
// Retorna: 55
// Auxiliar: Converter CSS para FTP
function cssToFTP(cssPacePer100mSeconds) {
// FTP em m/min = 100m / (pace em minutos)
return 100 / (cssPacePer100mSeconds / 60);
}
// Exemplo: CSS de 1:33 (93 segundos)
const ftp = cssToFTP(93); // Retorna: 64.5 m/min
SWOLF
Fórmula:
SWOLF = Tempo da Piscina (segundos) + Contagem de Braçadas
SWOLF₂₅ = (Tempo × 25/Comprimento da Piscina) + (Braçadas × 25/Comprimento da Piscina)
Implementação JavaScript:
function calculateSWOLF(timeSeconds, strokeCount) {
return timeSeconds + strokeCount;
}
function calculateNormalizedSWOLF(timeSeconds, strokeCount, poolLength) {
const normalizedTime = timeSeconds * (25 / poolLength);
const normalizedStrokes = strokeCount * (25 / poolLength);
return normalizedTime + normalizedStrokes;
}
// Exemplo:
const swolf = calculateSWOLF(20, 15);
// Retorna: 35
const swolf50m = calculateNormalizedSWOLF(40, 30, 50);
// Retorna: 35 (normalizado para 25m)
Mecânica de Braçada
Taxa de Braçada (SR)
Fórmula:
SR = 60 / Tempo do Ciclo (segundos)
SR = (Número de Braçadas / Tempo em segundos) × 60
Implementação JavaScript:
function calculateStrokeRate(strokeCount, timeSeconds) {
return (strokeCount / timeSeconds) * 60;
}
// Exemplo:
const sr = calculateStrokeRate(30, 25);
// Retorna: 72 SPM
Distância Por Braçada (DPS)
Fórmula:
DPS = Distância / Contagem de Braçadas
Implementação JavaScript:
function calculateDPS(distance, strokeCount, pushoffDistance = 0) {
const effectiveDistance = distance - pushoffDistance;
return effectiveDistance / strokeCount;
}
// Exemplo (piscina 25m, 5m de impulso):
const dps = calculateDPS(25, 12, 5);
// Retorna: 1.67 m/braçada
Índice de Braçada (SI)
Fórmula:
SI = Velocidade (m/s) × DPS (m/braçada)
Implementação JavaScript:
function calculateStrokeIndex(velocity, dps) {
return velocity * dps;
}
// Exemplo:
const si = calculateStrokeIndex(1.5, 1.7);
// Retorna: 2.55
Gráfico de Gerenciamento de Desempenho (PMC)
Cálculos de CTL, ATL, TSB
Fórmulas:
CTL hoje = CTL ontem + (TSS hoje - CTL ontem) × (1/42)
ATL hoje = ATL ontem + (TSS hoje - ATL ontem) × (1/7)
TSB = CTL ontem - ATL ontem
Implementação 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;
}
// Calcular PMC para série de treinos
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;
}
Recursos Relacionados
Explore a ciência por trás de cada métrica: