تکنیکی حوالہ اور فارمولے
مکمل ریاضیاتی نفاذ
نفاذ کی گائیڈ
یہ صفحہ SwimAnalytics کے تمام میٹرکس کے لیے کاپی اور پیسٹ کے لیے تیار فارمولے، اور قدم بہ قدم حساب کتاب کے طریقے فراہم کرتا ہے۔ انہیں حسب ضرورت نفاذ، تصدیق یا گہری سمجھ کے لیے استعمال کریں۔
⚠️ نفاذ کے نوٹس
- تمام اوقات کو حساب کتاب کے لیے سیکنڈ میں تبدیل کرنا ضروری ہے
- تیراکی کی رفتار الٹی ہے (زیادہ % = آہستہ رفتار)
- معقول حدود کے لیے ہمیشہ ان پٹس کی توثیق کریں
- حد کی صورتوں کو سنبھالیں (صفر سے تقسیم، منفی اقدار)
بنیادی کارکردگی میٹرکس
Critical Swim Speed (CSS)
فارمولا:
CSS (m/s) = (D₂ - D₁) / (T₂ - T₁)
CSS رفتار/100m (سیکنڈ) = (T₄₀₀ - T₂₀₀) / 2
🧪 انٹرایکٹو کیلکولیٹر - فارمولہ آزمائیں
CSS رفتار فی 100m:
1:49
حساب کتاب کے مراحل:
CSS (m/s) = (400 - 200) / (368 - 150) = 0.917 m/s
رفتار/100m = 100 / 0.917 = 109 سیکنڈ = 1:49
CSS (m/s) = (400 - 200) / (368 - 150) = 0.917 m/s
رفتار/100m = 100 / 0.917 = 109 سیکنڈ = 1:49
JavaScript میں نفاذ:
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" }
Swim Training Stress Score (sTSS)
مکمل فارمولا:
sTSS = (IF³) × دورانیہ (گھنٹے) × 100
IF = NSS / FTP
NSS = کل فاصلہ / کل وقت (m/min)
🧪 انٹرایکٹو کیلکولیٹر - فارمولہ آزمائیں
شمار شدہ sTSS:
55
حساب کتاب کے مراحل:
NSS = 3000m / 55min = 54.5 m/min
FTP = 100 / (93/60) = 64.5 m/min
IF = 54.5 / 64.5 = 0.845
sTSS = 0.845³ × (55/60) × 100 = 55
NSS = 3000m / 55min = 54.5 m/min
FTP = 100 / (93/60) = 64.5 m/min
IF = 54.5 / 64.5 = 0.845
sTSS = 0.845³ × (55/60) × 100 = 55
JavaScript میں نفاذ:
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/min
SWOLF
فارمولا:
SWOLF = لیپ کا وقت (سیکنڈ) + اسٹروک کی گنتی
SWOLF₂₅ = (وقت × 25/پول کی لمبائی) + (اسٹروک × 25/پول کی لمبائی)
🧪 انٹرایکٹو کیلکولیٹر - فارمولہ آزمائیں
SWOLF اسکور:
35
حساب:
SWOLF = 20s + 15 اسٹروک = 35
SWOLF = 20s + 15 اسٹروک = 35
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;
}
// Example:
const swolf = calculateSWOLF(20, 15);
// Returns: 35
const swolf50m = calculateNormalizedSWOLF(40, 30, 50);
// Returns: 35 (normalized to 25m)
اسٹروک میکینکس
Stroke Rate (SR)
فارمولا:
SR = 60 / سائیکل کا وقت (سیکنڈ)
SR = (اسٹروک کی تعداد / وقت سیکنڈ میں) × 60
🧪 انٹرایکٹو کیلکولیٹر - فارمولہ آزمائیں
Stroke Rate (SPM):
72
حساب:
SR = (30 / 25) × 60 = 72 SPM
SR = (30 / 25) × 60 = 72 SPM
JavaScript میں نفاذ:
function calculateStrokeRate(strokeCount, timeSeconds) {
return (strokeCount / timeSeconds) * 60;
}
// Example:
const sr = calculateStrokeRate(30, 25);
// Returns: 72 SPM
Distance Per Stroke (DPS)
فارمولا:
DPS = فاصلہ / اسٹروک کی گنتی
DPS = فاصلہ / (SR / 60)
JavaScript میں نفاذ:
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
JavaScript میں نفاذ:
function calculateVelocity(strokeRate, dps) {
return (strokeRate / 60) * dps;
}
// Example:
const velocity = calculateVelocity(70, 1.6);
// Returns: 1.87 m/s
Stroke Index (SI)
فارمولا:
SI = رفتار (m/s) × DPS (m/اسٹروک)
JavaScript میں نفاذ:
function calculateStrokeIndex(velocity, dps) {
return velocity * dps;
}
// Example:
const si = calculateStrokeIndex(1.5, 1.7);
// Returns: 2.55
Performance Management Chart (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
جدید حسابات
متعدد فاصلوں سے CSS (ریگریشن طریقہ)
JavaScript میں نفاذ:
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 }
رفتار سے شدت کا عنصر
JavaScript میں نفاذ:
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)
رفتار کی مستقل مزاجی کا تجزیہ
JavaScript میں نفاذ:
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 ? "بہترین" :
coefficientOfVariation < 10 ? "اچھا" :
coefficientOfVariation < 15 ? "معتدل" : "متغیر"
};
}
// 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: "بہترین" }
اسٹروک کی گنتی کے ذریعے تھکاوٹ کا پتہ لگانا
JavaScript میں نفاذ:
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 ? "کم از کم" :
strokeCountIncrease < 10 ? "معتدل" :
strokeCountIncrease < 20 ? "قابل ذکر" : "شدید"
};
}
// 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: "شدید" }
ڈیٹا کی تصدیق
تربیتی ڈیٹا کے معیار کی تصدیق
JavaScript میں نفاذ:
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(`غیر معمولی اوسط رفتار: ${Math.round(avgPace)}s فی 100m`);
}
// Check for reasonable stroke counts (10-50 per 25m)
const avgStrokesPer25m = (workout.totalStrokes / workout.totalDistance) * 25;
if (avgStrokesPer25m < 10 || avgStrokesPer25m > 50) {
issues.push(`غیر معمولی اسٹروک کی گنتی: ${Math.round(avgStrokesPer25m)} فی 25m`);
}
// Check for reasonable stroke rate (30-150 SPM)
const avgSR = calculateStrokeRate(workout.totalStrokes, workout.totalTime);
if (avgSR < 30 || avgSR > 150) {
issues.push(`غیر معمولی اسٹروک کی شرح: ${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(`لیپ ${i} اور ${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: [] }
معاون فنکشنز
وقت کی تبدیلی کی افادیت
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 اعشاریہ تک، sTSS کو انٹیجر تک
- درستگی محفوظ کریں: ڈیٹا بیس میں مکمل درستگی برقرار رکھیں، ڈسپلے کے لیے گول کریں
- مکمل طور پر ٹیسٹ کریں: حسابات کی تصدیق کے لیے معلوم اور درست ڈیٹا استعمال کریں