Технічна довідка та формули
Повна математична реалізація
Посібник із впровадження
Ця сторінка містить формули копіювання та вставлення та покрокові методи розрахунку для всіх Run Аналітичні показники. Використовуйте їх для індивідуальних реалізацій, перевірки або глибшого розуміння.
⚠️ Примітки щодо впровадження
- Для розрахунків усі часи слід конвертувати в секунди
- У розрахунку rTSS використовується коефіцієнт інтенсивності в квадраті (IF²)
- Завжди перевіряйте вхідні дані для прийнятних діапазонів
- Обробка граничних випадків (ділення на нуль, від’ємні значення)
Основні показники ефективності
Критична швидкість бігу (CRS)
формула:
CRS (м/с) = (D₂ - D₁) / (T₂ - T₁)
Темп CRS (хв/км) = 16,667 / CRS (м/с)
🧪 Інтерактивний калькулятор - перевірте формулу
CRS Темп (хв/км):
4:17
Етапи розрахунку:
CRS (м/с) = (3600 - 1200) / (900 - 270) = 3,81 м/с
Темп (хв/км) = 1000 / 3,81 = 262 секунди = 4:22
CRS (м/с) = (3600 - 1200) / (900 - 270) = 3,81 м/с
Темп (хв/км) = 1000 / 3,81 = 262 секунди = 4:22
Реалізація JavaScript:
function calculateCRS(distance1, time1, distance2, time2) {
// Convert times to seconds
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')}`
};
}Оцінка бігового стресу (rTSS)
Повна формула:
rTSS = (IF²) × Тривалість (годин) × 100
IF = NSS / Порогова швидкість
NSS = Загальна відстань / Загальний час (м/хв)
🧪 Інтерактивний калькулятор - перевірте формулу
Розрахований rTSS:
31
Етапи розрахунку:
NSS = 5000 м / 25 хв = 200 м / хв
FTP = 1000 / (255/60) = 235,3 м/хв
IF = 200 / 235,3 = 0,850
rTSS = 0,850² × (25/60) × 100 = 31
NSS = 5000 м / 25 хв = 200 м / хв
FTP = 1000 / (255/60) = 235,3 м/хв
IF = 200 / 235,3 = 0,850
rTSS = 0,850² × (25/60) × 100 = 31
Реалізація JavaScript:
function calculateRTSS(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 rTSS using quadratic intensity factor
const rtss = Math.pow(intensityFactor, 2) * hours * 100;
return Math.round(rtss);
}
// Example usage:
const rtss = calculateRTSS(3000, 55, 64.5);
// Returns: 65
// 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Біомеханічна ефективність: вертикальне співвідношення
формула:
Вертикальне співвідношення (%) = (Вертикальні коливання ÷ Довжина кроку) × 100
🧪 Інтерактивний калькулятор - перевірте формулу
Вертикальне співвідношення:
7,4%
Розрахунок:
Вертикальне співвідношення = (8,5 / 115) × 100 = 7,4%
Вертикальне співвідношення = (8,5 / 115) × 100 = 7,4%
Реалізація JavaScript:
function calculateVerticalRatio(oscillationCm, strideLengthCm) {
return (oscillationCm / strideLengthCm) * 100;
}
function calculateEfficiencyFactor(paceMetersPerMin, avgHeartRate) {
return paceMetersPerMin / avgHeartRate;
}Механіка бігу
Швидкість кроку (SR)
формула:
SR = 60 / Час циклу (секунди)
SR = (кількість кроків / час у секундах) × 60
🧪 Інтерактивний калькулятор - перевірте формулу
Каденція (SPM):
180
Розрахунок:
Каденція = (180 / 60) × 60 = 180 SPM
Каденція = (180 / 60) × 60 = 180 SPM
Реалізація JavaScript:
function calculateCadence(stepCount, timeSeconds) {
return (stepCount / timeSeconds) * 60;
}
// Example:
const spm = calculateCadence(180, 60);
// Returns: 180 SPMДовжина кроку
формула:
Довжина кроку = відстань / (кількість кроків / 2)
Довжина кроку = швидкість / (каденція / 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Швидкість від SR і DPS
формула:
Швидкість (м/с) = (SR / 60) × DPS
Реалізація JavaScript:
function calculateVelocity(strideRate, dps) {
return (strideRate / 60) * dps;
}
// Example:
const velocity = calculateVelocity(70, 1.6);
// Returns: 1.87 m/sІндекс кроку (SI)
формула:
SI = Швидкість (м/с) × DPS (м/крок)
Реалізація JavaScript:
function calculateStrideIndex(velocity, dps) {
return velocity * dps;
}
// Example:
const si = calculateStrideIndex(1.5, 1.7);
// Returns: 2.55Діаграма управління продуктивністю (PMC) для бігу
Обчислення CTL, ATL, TSB
Формули:
CTL сьогодні = CTL вчора + (TSS сьогодні - CTL вчора) × (1/42)
ATL сьогодні = ATL вчора + (TSS сьогодні - ATL вчора) × (1/7)
TSB = CTL вчора - ATL вчора
Реалізація 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: 1.18, anaerobic_capacity: 15.3 }Фактор інтенсивності від Pace
Реалізація 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" }Виявлення втоми за допомогою Stride Efficiency
Реалізація 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')}`;
}
// Convert seconds to 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')}`;
}
// Examples:
timeToSeconds("1:33"); // Returns: 93
secondsToTime(93); // Returns: "1:33"
secondsToTimeDetailed(3665); // Returns: "1:01:05"Ресурси впровадження
Усі формули на цій сторінці готові до виробництва та перевірені відповідно до наукової літератури. використання їх для користувальницьких інструментів аналітики, перевірки або глибшого розуміння виконання обчислень продуктивності.
💡 Найкращі практики
- Перевірити введені дані:Перед обчисленням перевірте розумні діапазони
- Обробка крайових випадків:Ділення на нуль, від’ємні значення, нульові дані
- Округліть відповідно:CTL/ATL/TSB до 1 десяткового дробу, rTSS до цілого числа
- Точність зберігання:Зберігайте повну точність у базі даних, круглі для відображення
- Ретельно протестуйте:Використовуйте завідомо справні дані для перевірки розрахунків
Формулы Производительности в Плавании: Расчёты CRS, TSS,
Полные математические формулы для аналитики плавания. Узнайте, как вручную рассчитать CRS, rTSS, CTL, ATL, TSB. Включает решённые примеры, выводы и.
- 2026-03-24
- формулы плавания · расчёт CRS · формула TSS · математика тренировок · расчёты производительности
- Бібліографія
