ટેકનિકલ સંદર્ભ અને ફોર્મ્યુલા
સંપૂર્ણ ગાણિતિક અમલીકરણ
અમલીકરણ માર્ગદર્શિકા
આ પેજ તમામ સ્વિમ એનાલિટિક્સ મેટ્રિક્સ માટે કોપી-પેસ્ટ કરી શકાય તેવા ફોર્મ્યુલા અને સ્ટેપ-બાય-સ્ટેપ ગણતરી પદ્ધતિઓ પ્રદાન કરે છે. કસ્ટમ અમલીકરણ, ચકાસણી અથવા ઊંડી સમજણ માટે આનો ઉપયોગ કરો.
⚠️ અમલીકરણ નોંધો
- ગણતરી માટે તમામ સમય સેકન્ડમાં રૂપાંતરિત હોવા જોઈએ
- સ્વિમિંગ પેસ વ્યસ્ત (inverse) છે (વધારે % = ધીમી ગતિ)
- હંમેશા વ્યાજબી રેન્જ માટે ઇનપુટ્સ તપાસો
- એજ કેસો (handle edge cases) ધ્યાનમાં લો (ઝીરો દ્વારા ભાગાકાર, નેગેટિવ મૂલ્યો)
મેન્યુઅલ ગણતરીઓ ટાળવા માંગો છો? અમારા વાંચોતાલીમ લોડ માર્ગદર્શિકાઅથવા મફત સ્વિમ એનાલિટિક્સ એપ્લિકેશનનો ઉપયોગ કરો.
મુખ્ય પર્ફોર્મન્સ મેટ્રિક્સ
ક્રિટીકલ સ્વિમ સ્પીડ (CSS)
ફોર્મ્યુલા:
CSS (m/s) = (D₂ - D₁) / (T₂ - T₁)
CSS Pace/100m (seconds) = (T₄₀₀ - T₂₀₀) / 2
🧪 ઇન્ટરેક્ટિવ કેલ્ક્યુલેટર - ફોર્મ્યુલા તપાસો
પ્રતિ ૧૦૦ મીટર CSS પેસ:
1:49
ગણતરીના પગલાં:
CSS (m/s) = (400 - 200) / (368 - 150) = 0.917 m/s
Pace/100m = 100 / 0.917 = 109 સેકન્ડ = 1:49
CSS (m/s) = (400 - 200) / (368 - 150) = 0.917 m/s
Pace/100m = 100 / 0.917 = 109 સેકન્ડ = 1:49
JavaScript અમલીકરણ:
function calculateCSS(distance1, time1, distance2, time2) {
// જરૂર જણાય તો સમયને સેકન્ડમાં રૂપાંતરિત કરો
const t1 = typeof time1 === 'string' ? timeToSeconds(time1) : time1;
const t2 = typeof time2 === 'string' ? timeToSeconds(time2) : time2;
// m/s માં CSS ગણતરી કરો
const css_ms = (distance2 - distance1) / (t2 - t1);
// ૧૦૦ મીટર દીઠ પેસ (સેકન્ડમાં) ગણો
const pace_per_100m = 100 / css_ms;
// 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')}`
};
}
// ઉદાહરણ વપરાશ:
const result = calculateCSS(200, 150, 400, 368);
// રિટર્ન (Returns): { css_ms: 0.917, pace_seconds: 109, pace_formatted: "1:49" }સ્વિમ ટ્રેનિંગ સ્ટ્રેસ સ્કોર (sTSS)
સંપૂર્ણ ફોર્મ્યુલા:
sTSS = (IF³) × અવધિ (કલાકમાં) × ૧૦૦
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) {
// નોર્મલાઇઝ્ડ સ્વિમ સ્પીડ (Normalized Swim Speed) ગણો
const nss = distance / timeMinutes;
// ઇન્ટેન્સિટી ફેક્ટર (Intensity Factor) ગણો
const intensityFactor = nss / ftpMetersPerMin;
// કલાક (hours) ગણો
const hours = timeMinutes / 60;
// ક્યુબ્ડ ઇન્ટેન્સિટી ફેક્ટરનો ઉપયોગ કરીને sTSS ગણો
const stss = Math.pow(intensityFactor, 3) * hours * 100;
return Math.round(stss);
}
// ઉદાહરણ વપરાશ:
const stss = calculateSTSS(3000, 55, 64.5);
// રિટર્ન (Returns): 55
// હેલ્પર: CSS ને FTP માં રૂપાંતરિત કરો
function cssToFTP(cssPacePer100mSeconds) {
// m/min માં FTP = 100m / (મિનિટમાં પેસ)
return 100 / (cssPacePer100mSeconds / 60);
}
// ઉદાહરણ: ૧:૩૩ ની CSS (૯૩ સેકન્ડ)
const ftp = cssToFTP(93); // રિટર્ન (Returns): 64.5 m/minSWOLF
ફોર્મ્યુલા:
SWOLF = લેપનો સમય (સેકન્ડ) + સ્ટ્રોકની સંખ્યા
SWOLF₂૫ = (સમય × ૨૫/પૂલની લંબાઈ) + (સ્ટ્રોક × ૨૫/પૂલની લંબાઈ)
🧪 ઇન્ટરેક્ટિવ કેલ્ક્યુલેટર - ફોર્મ્યુલા તપાસો
SWOLF સ્કોર:
35
ગણતરી:
SWOLF = 20s + 15 strokes = 35
SWOLF = 20s + 15 strokes = 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;
}
// ઉદાહરણ:
const swolf = calculateSWOLF(20, 15);
// રિટર્ન (Returns): 35
const swolf50m = calculateNormalizedSWOLF(40, 30, 50);
// રિટર્ન (Returns): 35 (૨૫ મીટરમાં નોર્મલાઇઝ્ડ)સ્ટ્રોક મિકેનિક્સ
સ્ટ્રોક રેટ (SR)
ફોર્મ્યુલા:
SR = 60 / સાયકલનો સમય (સેકન્ડ)
SR = (સ્ટ્રોકની સંખ્યા / સેકન્ડમાં સમય) × 60
🧪 ઇન્ટરેક્ટિવ કેલ્ક્યુલેટર - ફોર્મ્યુલા તપાસો
સ્ટ્રોક રેટ (SPM):
72
ગણતરી:
SR = (30 / 25) × 60 = 72 SPM
SR = (30 / 25) × 60 = 72 SPM
JavaScript અમલીકરણ:
function calculateStrokeRate(strokeCount, timeSeconds) {
return (strokeCount / timeSeconds) * 60;
}
// ઉદાહરણ:
const sr = calculateStrokeRate(30, 25);
// રિટર્ન (Returns): 72 SPMડિસ્ટન્સ પર સ્ટ્રોક (DPS)
ફોર્મ્યુલા:
DPS = અંતર / સ્ટ્રોકની સંખ્યા
DPS = અંતર / (SR / 60)
JavaScript અમલીકરણ:
function calculateDPS(distance, strokeCount, pushoffDistance = 0) {
const effectiveDistance = distance - pushoffDistance;
return effectiveDistance / strokeCount;
}
// ઉદાહરણ (૨૫ મીટર પૂલ, ૫ મીટર પુશ-ઓફ):
const dps = calculateDPS(25, 12, 5);
// રિટર્ન (Returns): 1.67 m/stroke
// મલ્ટિપલ લેપ્સ (Laps) માટે:
const dps100m = calculateDPS(100, 48, 4 * 5);
// રિટર્ન (Returns): 1.67 m/stroke (૪ લેપ્સ × ૫ મીટર પુશ-ઓફ)SR અને DPS પરથી વેલોસિટી (Velocity)
ફોર્મ્યુલા:
વેલોસિટી (m/s) = (SR / 60) × DPS
JavaScript અમલીકરણ:
function calculateVelocity(strokeRate, dps) {
return (strokeRate / 60) * dps;
}
// ઉદાહરણ:
const velocity = calculateVelocity(70, 1.6);
// રિટર્ન (Returns): 1.87 m/sસ્ટ્રોક ઇન્ડેક્સ (SI)
ફોર્મ્યુલા:
SI = વેલોસિટી (m/s) × DPS (m/stroke)
JavaScript અમલીકરણ:
function calculateStrokeIndex(velocity, dps) {
return velocity * dps;
}
// ઉદાહરણ:
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 ગઈકાલે
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;
}
// વર્કઆઉટ્સની શ્રેણી માટે PMC ગણો
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;
}
// ઉદાહરણ વપરાશ:
const workouts = [
{ date: '2025-01-01', tss: 50 },
{ date: '2025-01-02', tss: 60 },
{ date: '2025-01-03', tss: 45 },
// ... વધુ વર્કઆઉટ્સ
];
const pmc = calculatePMC(workouts);
// દરેક દિવસ માટે CTL, ATL, TSB સાથે એરે (Array) રિટર્ન કરે છેઅદ્યતન ગણતરીઓ (Advanced Calculations)
મલ્ટિપલ અંતર પરથી CSS (રીગ્રેશન મેથડ)
JavaScript અમલીકરણ:
function calculateCSSRegression(distances, times) {
// લિનિયર રીગ્રેશન (Linear regression): અંતર = a + b * સમય
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, // ક્રિટીકલ સ્વિમિંગ વેલોસિટી (m/s)
anaerobic_capacity: intercept // એનારોબિક અંતર ક્ષમતા (મીટર)
};
}
// મલ્ટિપલ ટેસ્ટ ડિસ્ટન્સ સાથે ઉદાહરણ:
const distances = [100, 200, 400, 800];
const times = [65, 150, 340, 720]; // સેકન્ડમાં
const result = calculateCSSRegression(distances, times);
// રિટર્ન (Returns): { css: 1.18, anaerobic_capacity: 15.3 }પેસ (Pace) પરથી ઇન્ટેન્સિટી ફેક્ટર
JavaScript અમલીકરણ:
function calculateIntensityFactor(actualPace100m, thresholdPace100m) {
// પેસને સ્પીડ (m/s) માં રૂપાંતરિત કરો
const actualSpeed = 100 / actualPace100m;
const thresholdSpeed = 100 / thresholdPace100m;
return actualSpeed / thresholdSpeed;
}
// ઉદાહરણ:
const if_value = calculateIntensityFactor(110, 93);
// રિટર્ન (Returns): 0.845 (થ્રેશોલ્ડના ૮૪.૫% પર સ્વિમિંગ)પેસ સાતત્ય વિશ્લેષણ (Pace Consistency Analysis)
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 ? "ઉત્કૃષ્ટ (Excellent)" :
coefficientOfVariation < 10 ? "સારું (Good)" :
coefficientOfVariation < 15 ? "મધ્યમ (Moderate)" : "પરિવર્તનશીલ (Variable)"
};
}
// ઉદાહરણ:
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" }સ્ટ્રોકની સંખ્યા પરથી થાકની તપાસ (Fatigue Detection)
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 ? "ન્યૂનતમ (Minimal)" :
strokeCountIncrease < 10 ? "મધ્યમ (Moderate)" :
strokeCountIncrease < 20 ? "નોંધપાત્ર (Significant)" : "ગંભીર (Severe)"
};
}
// ઉદાહરણ:
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" }ડેટા વેરિફિકેશન (Data Validation)
વર્કઆઉટ ડેટા ક્વોલિટી ચેક
JavaScript અમલીકરણ:
function validateWorkoutData(workout) {
const issues = [];
// વ્યાજબી પેસ રેન્જ (૧:૦૦-૫:૦૦ પ્રતિ ૧૦૦ મીટર) માટે તપાસો
const avgPace = (workout.totalTime / workout.totalDistance) * 100;
if (avgPace < 60 || avgPace > 300) {
issues.push(`અસામાન્ય સરેરાશ પેસ: ${Math.round(avgPace)} સેકન્ડ પ્રતિ ૧૦૦ મીટર`);
}
// વ્યાજબી સ્ટ્રોક કાઉન્ટ (૧૦-૫૦ પ્રતિ ૨૫ મીટર) માટે તપાસો
const avgStrokesPer25m = (workout.totalStrokes / workout.totalDistance) * 25;
if (avgStrokesPer25m < 10 || avgStrokesPer25m > 50) {
issues.push(`અસામાન્ય સ્ટ્રોક કાઉન્ટ: ૨૫ મીટર દીઠ ${Math.round(avgStrokesPer25m)}`);
}
// વ્યાજબી સ્ટ્રોક રેટ (૩૦-૧૫૦ SPM) માટે તપાસો
const avgSR = calculateStrokeRate(workout.totalStrokes, workout.totalTime);
if (avgSR < 30 || avgSR > 150) {
issues.push(`અસામાન્ય સ્ટ્રોક રેટ: ${Math.round(avgSR)} SPM`);
}
// ગુમ થયેલ લેપ્સ (સમયમાં અંતર) માટે તપાસો
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) { // ૫ મિનિટનું અંતર
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: [] }હેલ્પર ફંક્શન્સ (Helper Functions)
સમય રૂપાંતરણ ઉપયોગિતાઓ (Time Conversion Utilities)
JavaScript અમલીકરણ:
// mm:ss ને સેકન્ડમાં રૂપાંતરિત કરો
function timeToSeconds(timeString) {
const parts = timeString.split(':');
return parseInt(parts[0]) * 60 + parseInt(parts[1]);
}
// સેકન્ડને mm:ss માં રૂપાંતરિત કરો
function secondsToTime(seconds) {
const minutes = Math.floor(seconds / 60);
const secs = Math.round(seconds % 60);
return `${minutes}:${secs.toString().padStart(2, '0')}`;
}
// સેકન્ડને 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')}`;
}
// ઉદાહરણો:
timeToSeconds("1:33"); // રિટર્ન (Returns): 93
secondsToTime(93); // રિટર્ન (Returns): "1:33"
secondsToTimeDetailed(3665); // રિટર્ન (Returns): "1:01:05"અમલીકરણ સંસાધનો (Implementation Resources)
આ પેજ પરના તમામ ફોર્મ્યુલા પ્રોડક્શન-રેડી છે અને વૈજ્ઞાનિક સાહિત્ય સામે ચકાસવામાં આવ્યા છે. કસ્ટમ એનાલિટિક્સ ટૂલ્સ, વેરિફિકેશન અથવા સ્વિમિંગ પર્ફોર્મન્સ ગણતરીઓની ઊંડી સમજ માટે તેનો ઉપયોગ કરો.
💡 શ્રેષ્ઠ પ્રયાસો (Best Practices)
- ઇનપુટ્સ તપાસો: ગણતરી કરતા પહેલા વ્યાજબી રેન્જ માટે તપાસો
- એજ કેસો ધ્યાનમાં લો: ઝીરો દ્વારા ભાગાકાર, નેગેટિવ મૂલ્યો, નલ (null) ડેટા
- યોગ્ય રાઉન્ડિંગ કરો: CTL/ATL/TSB ને ૧ દશાંશ સુધી, sTSS ને પૂર્ણાંકમાં
- ચોકસાઈ જાળવો: ડેટાબેઝમાં સંપૂર્ણ ચોકસાઈ રાખો, ડિસ્પ્લે માટે રાઉન્ડ કરો
- સંપૂર્ણ પરીક્ષણ કરો: ગણતરીઓ ચકાસવા માટે જાણીતા ડેટાનો ઉપયોગ કરો
