প্রযুক্তিগত রেফারেন্স এবং সূত্র
সম্পূর্ণ গাণিতিক বাস্তবায়ন
বাস্তবায়ন নির্দেশিকা
এই পৃষ্ঠা 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
পারফরম্যান্স ম্যানেজমেন্ট চার্ট (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 পূর্ণসংখ্যায়
- নির্ভুলতা সংরক্ষণ করুন: ডেটাবেসে সম্পূর্ণ নির্ভুলতা বজায় রাখুন, প্রদর্শনের জন্য রাউন্ড করুন
- পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন: গণনা যাচাই করতে জানা সঠিক ডেটা ব্যবহার করুন