مرجع فنی و فرمول ها
پیاده سازی کامل ریاضی
راهنمای پیاده سازی
این صفحه فرمولهای کپی پیست و روشهای محاسبه گام به گام را برای تمام معیارهای Swim Analytics ارائه میکند. از اینها برای پیاده سازی سفارشی، تأیید صحت یا درک عمیق تر استفاده کنید.
⚠️ نکات اجرایی
- همه زمان ها باید برای محاسبات به ثانیه تبدیل شوند
- سرعت شنا معکوس است (% بیشتر = سرعت کمتر)
- همیشه ورودی ها را برای محدوده های معقول تأیید کنید
- موارد لبه دسته (تقسیم بر صفر، مقادیر منفی)
آیا می خواهید از محاسبات دستی اجتناب کنید؟ ما را بخوانیدراهنمای بار آموزشییا از برنامه رایگان Swim Analytics استفاده کنید.
معیارهای اصلی عملکرد
سرعت بحرانی شنا (CSS)
فرمول:
CSS (m/s) = (D2 - D1) / (T2 - T1)
سرعت CSS/100 متر (ثانیه) = (T400 - T200) / 2
🧪 ماشین حساب تعاملی - فرمول را تست کنید
سرعت CSS در هر 100 متر:
1:49
مراحل محاسبه:
CSS (m/s) = (400 - 200) / (368 - 150) = 0.917 m/s
سرعت/100 متر = 100 / 0.917 = 109 ثانیه = 1:49
CSS (m/s) = (400 - 200) / (368 - 150) = 0.917 m/s
سرعت/100 متر = 100 / 0.917 = 109 ثانیه = 1:49
پیاده سازی جاوا اسکریپت:
function calculateCSS(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 CSS in m/s
const css_ms = (distance2 - distance1) / (t2 - t1);
// Calculate pace per 100m in seconds
const pace_per_100m = 100 / css_ms;
// Convert to mm:ss format
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')}`
};
}
// Example usage:
const result = calculateCSS(200, 150, 400, 368);
// Returns: { css_ms: 0.917, pace_seconds: 109, pace_formatted: "1:49" }امتیاز استرس تمرین شنا (sTSS)
فرمول کامل:
sTSS = (IF³) × مدت زمان (ساعت) × 100
IF = NSS / FTP
NSS = فاصله کل / کل زمان (m/min)
🧪 ماشین حساب تعاملی - فرمول را تست کنید
sTSS محاسبه شده:
55
مراحل محاسبه:
NSS = 3000 متر / 55 دقیقه = 54.5 متر در دقیقه
FTP = 100 / (93/60) = 64.5 متر در دقیقه
IF = 54.5 / 64.5 = 0.845
sTSS = 0.845³ × (55/60) × 100 = 55
NSS = 3000 متر / 55 دقیقه = 54.5 متر در دقیقه
FTP = 100 / (93/60) = 64.5 متر در دقیقه
IF = 54.5 / 64.5 = 0.845
sTSS = 0.845³ × (55/60) × 100 = 55
پیاده سازی جاوا اسکریپت:
function calculateSTSS(distance, timeMinutes, ftpMetersPerMin) {
// Calculate Normalized Swim 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(3000, 55, 64.5);
// Returns: 55
// Helper: Convert CSS to FTP
function cssToFTP(cssPacePer100mSeconds) {
// FTP in m/min = 100m / (pace in minutes)
return 100 / (cssPacePer100mSeconds / 60);
}
// Example: CSS of 1:33 (93 seconds)
const ftp = cssToFTP(93); // Returns: 64.5 m/minSWOLF
فرمول:
SWOLF = زمان دور (ثانیه) + تعداد ضربه
SWOLF25 = (زمان × 25/طول استخر) + (ضربه × 25/طول استخر)
🧪 ماشین حساب تعاملی - فرمول را تست کنید
امتیاز SWOLF:
35
محاسبه:
SWOLF = 20 ثانیه + 15 ضربه = 35
SWOLF = 20 ثانیه + 15 ضربه = 35
پیاده سازی جاوا اسکریپت:
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;
}
// Example:
const swolf = calculateSWOLF(20, 15);
// Returns: 35
const swolf50m = calculateNormalizedSWOLF(40, 30, 50);
// Returns: 35 (normalized to 25m)مکانیک سکته مغزی
نرخ سکته مغزی (SR)
فرمول:
SR = 60 / زمان چرخه (ثانیه)
SR = (تعداد ضربه / زمان بر حسب ثانیه) × 60
🧪 ماشین حساب تعاملی - فرمول را تست کنید
نرخ سکته مغزی (SPM):
72
محاسبه:
SR = (30 / 25) × 60 = 72 SPM
SR = (30 / 25) × 60 = 72 SPM
پیاده سازی جاوا اسکریپت:
function calculateStrokeRate(strokeCount, timeSeconds) {
return (strokeCount / timeSeconds) * 60;
}
// Example:
const sr = calculateStrokeRate(30, 25);
// Returns: 72 SPMفاصله در هر ضربه (DPS)
فرمول:
DPS = فاصله / تعداد ضربه
DPS = فاصله / (SR / 60)
پیاده سازی جاوا اسکریپت:
function calculateDPS(distance, strokeCount, pushoffDistance = 0) {
const effectiveDistance = distance - pushoffDistance;
return effectiveDistance / strokeCount;
}
// Example (25m pool, 5m push-off):
const dps = calculateDPS(25, 12, 5);
// Returns: 1.67 m/stroke
// For multiple laps:
const dps100m = calculateDPS(100, 48, 4 * 5);
// Returns: 1.67 m/stroke (4 laps × 5m push-off)سرعت از SR و DPS
فرمول:
سرعت (m/s) = (SR / 60) × DPS
پیاده سازی جاوا اسکریپت:
function calculateVelocity(strokeRate, dps) {
return (strokeRate / 60) * dps;
}
// Example:
const velocity = calculateVelocity(70, 1.6);
// Returns: 1.87 m/sشاخص سکته مغزی (SI)
فرمول:
SI = سرعت (m/s) × DPS (m/stroke)
پیاده سازی جاوا اسکریپت:
function calculateStrokeIndex(velocity, dps) {
return velocity * dps;
}
// Example:
const si = calculateStrokeIndex(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 دیروز
پیاده سازی جاوا اسکریپت:
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محاسبات پیشرفته
CSS از فاصله های چندگانه (روش رگرسیون)
پیاده سازی جاوا اسکریپت:
function calculateCSSRegression(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 {
css: slope, // Critical swimming 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 = calculateCSSRegression(distances, times);
// Returns: { css: 1.18, anaerobic_capacity: 15.3 }ضریب شدت از سرعت
پیاده سازی جاوا اسکریپت:
function calculateIntensityFactor(actualPace100m, thresholdPace100m) {
// Convert pace to speed (m/s)
const actualSpeed = 100 / actualPace100m;
const thresholdSpeed = 100 / thresholdPace100m;
return actualSpeed / thresholdSpeed;
}
// Example:
const if_value = calculateIntensityFactor(110, 93);
// Returns: 0.845 (swimming at 84.5% of threshold)تجزیه و تحلیل ثبات سرعت
پیاده سازی جاوا اسکریپت:
function analyzePaceConsistency(laps) {
const paces = laps.map(lap => lap.distance / lap.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 laps = [
{ distance: 100, time: 70 },
{ distance: 100, time: 72 },
{ distance: 100, time: 71 },
// ...
];
const analysis = analyzePaceConsistency(laps);
// Returns: { avgPace: 1.41, stdDev: 0.02, coefficientOfVariation: 1.4, consistency: "Excellent" }تشخیص خستگی از تعداد سکته مغزی
پیاده سازی جاوا اسکریپت:
function detectFatigue(laps) {
const firstThird = laps.slice(0, Math.floor(laps.length/3));
const lastThird = laps.slice(-Math.floor(laps.length/3));
const firstThirdAvg = firstThird.reduce((sum, lap) =>
sum + lap.strokeCount, 0) / firstThird.length;
const lastThirdAvg = lastThird.reduce((sum, lap) =>
sum + lap.strokeCount, 0) / lastThird.length;
const strokeCountIncrease = ((lastThirdAvg - firstThirdAvg) / firstThirdAvg) * 100;
return {
firstThirdAvg: Math.round(firstThirdAvg * 10) / 10,
lastThirdAvg: Math.round(lastThirdAvg * 10) / 10,
percentIncrease: Math.round(strokeCountIncrease * 10) / 10,
fatigueLevel: strokeCountIncrease < 5 ? "Minimal" :
strokeCountIncrease < 10 ? "Moderate" :
strokeCountIncrease < 20 ? "Significant" : "Severe"
};
}
// Example:
const laps = [
{ strokeCount: 14 }, { strokeCount: 14 }, { strokeCount: 15 },
{ strokeCount: 15 }, { strokeCount: 16 }, { strokeCount: 16 },
{ strokeCount: 17 }, { strokeCount: 18 }, { strokeCount: 18 }
];
const fatigue = detectFatigue(laps);
// Returns: { firstThirdAvg: 14.3, lastThirdAvg: 17.7, percentIncrease: 23.8, fatigueLevel: "Severe" }اعتبار سنجی داده ها
بررسی کیفیت داده های تمرین
پیاده سازی جاوا اسکریپت:
function validateWorkoutData(workout) {
const issues = [];
// Check for reasonable pace ranges (1:00-5:00 per 100m)
const avgPace = (workout.totalTime / workout.totalDistance) * 100;
if (avgPace < 60 || avgPace > 300) {
issues.push(`Unusual average pace: ${Math.round(avgPace)}s per 100m`);
}
// Check for reasonable stroke counts (10-50 per 25m)
const avgStrokesPer25m = (workout.totalStrokes / workout.totalDistance) * 25;
if (avgStrokesPer25m < 10 || avgStrokesPer25m > 50) {
issues.push(`Unusual stroke count: ${Math.round(avgStrokesPer25m)} per 25m`);
}
// Check for reasonable stroke rate (30-150 SPM)
const avgSR = calculateStrokeRate(workout.totalStrokes, workout.totalTime);
if (avgSR < 30 || avgSR > 150) {
issues.push(`Unusual stroke rate: ${Math.round(avgSR)} SPM`);
}
// Check for missing laps (gaps in time)
if (workout.laps && workout.laps.length > 1) {
for (let i = 1; i < workout.laps.length; i++) {
const gap = workout.laps[i].startTime -
(workout.laps[i-1].startTime + workout.laps[i-1].duration);
if (gap > 300) { // 5 minute gap
issues.push(`Large gap detected between laps ${i} and ${i+1}`);
}
}
}
return {
isValid: issues.length === 0,
issues
};
}
// Example:
const workout = {
totalDistance: 2000,
totalTime: 1800, // 30 minutes
totalStrokes: 800,
laps: [/* lap data */]
};
const validation = validateWorkoutData(workout);
// Returns: { isValid: true, issues: [] }توابع کمکی
ابزارهای تبدیل زمان
پیاده سازی جاوا اسکریپت:
// 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 اعشاری، sTSS به عدد صحیح
- دقت ذخیره سازی:دقت کامل را در پایگاه داده، دور برای نمایش نگه دارید
- به طور کامل تست کنید:برای تأیید محاسبات از داده های شناخته شده خوب استفاده کنید
صيغ أداء السباحة: حسابات CSS و TSS و CTL/ATL
فرمول های عملکرد شنا را با نمونه کدهای جاوا اسکریپت کامل کنید. CSS، sTSS، CTL/ATL/TSB، SWOLF، نرخ سکته را محاسبه کنید. پیاده سازی های آماده تولید برای توسعه دهندگان و...
- 2026-03-24
- صيغ السباحة · حساب CSS · صيغة TSS · رياضيات التدريب · حسابات الأداء
- المراجع
