ឯកសារយោង និងរូបមន្ត

ការអនុវត្តន៍គណិតវិទ្យាពេញលេញ

ការណែនាំអំពីការអនុវត្ត

ទំព័រនេះផ្តល់នូវរូបមន្តចម្លងបិទភ្ជាប់ និងវិធីសាស្ត្រគណនាជាជំហានៗសម្រាប់ដំណើរការទាំងអស់។ ម៉ែត្រវិភាគ។ ប្រើវាសម្រាប់ការអនុវត្តផ្ទាល់ខ្លួន ការផ្ទៀងផ្ទាត់ ឬការយល់ដឹងកាន់តែស៊ីជម្រៅ។

⚠️ កំណត់ចំណាំការអនុវត្ត

  • ពេលវេលាទាំងអស់គួរតែត្រូវបានបំប្លែងទៅជាវិនាទីសម្រាប់ការគណនា
  • rTSS ការគណនាប្រើកត្តាអាំងតង់ស៊ីតេការេ (IF²)
  • តែងតែធ្វើឱ្យធាតុចូលមានសុពលភាពសម្រាប់ជួរសមហេតុផល
  • ដោះស្រាយករណីគែម (ចែកដោយសូន្យ តម្លៃអវិជ្ជមាន)

សូចនាករការអនុវត្តស្នូល

ល្បឿនរត់សំខាន់ (CRS)

រូបមន្ត៖

CRS (m/s) = (D₂ - D₁) / (T₂ - T₁)
CRS ល្បឿន (នាទី/គីឡូម៉ែត្រ) = 16.667 / CRS (m/s)

🧪 ការគណនាអន្តរកម្ម - សាកល្បងរូបមន្ត

CRS ល្បឿន (នាទី/គីឡូម៉ែត្រ)៖
4:17
ជំហានគណនា៖
CRS (m/s) = (3600 - 1200) / (900 - 270) = 3.81 m/s
ល្បឿន (នាទី/គីឡូម៉ែត្រ) = 1000 / 3.81 = 262 វិនាទី = 4:22

ការអនុវត្ត JavaScript៖

មុខងារគណនាCRS(ចម្ងាយ1,ពេលវេលា1,ចម្ងាយ2,ពេលវេលា2) {
  // បំលែងពេលវេលាទៅជាវិនាទី
  const t1 = typeof time1 === 'string' ? timeToSeconds(time1): time1;
  const t2 = typeof time2 === 'string' ? timeToSeconds(time2): time2;

  // គណនាល្បឿន CRS ក្នុង m/s
  const crs_ms = (ចម្ងាយ 2 - ចម្ងាយ1) / (t2 - t1);

  // គណនាល្បឿនក្នុងមួយគីឡូម៉ែត្រគិតជាវិនាទី
  const pace_per_km = 1000 / crs_ms;

  // បំលែងទៅជាទម្រង់ mm:ss
  នាទី const = Math.floor(pace_per_km / 60);
  const វិនាទី = Math.round(pace_per_km % 60);

  ត្រឡប់ {
    ល្បឿន_ms៖ crs_ms,
    pace_seconds៖ pace_per_km,
    pace_formatted៖ `${minutes}:${seconds.toString().padStart(2, '0')}`
  };
}

ការរត់ពិន្ទុភាពតានតឹង (rTSS)

រូបមន្តពេញលេញ៖

rTSS= (IF²) × រយៈពេល (ម៉ោង) × 100
IF = NSS / ល្បឿនកំណត់
NSS = ចម្ងាយសរុប / ពេលវេលាសរុប (m/min)

🧪 ការគណនាអន្តរកម្ម - សាកល្បងរូបមន្ត

គណនា rTSS៖
៣១
ជំហានគណនា៖
NSS = 5000m / 25min = 200 m/min
FTP = 1000 / (255/60) = 235.3 m/min
IF = 200 / 235.3 = 0.850
rTSS = 0.850² × (25/60) × 100 = 31

ការអនុវត្ត JavaScript៖

មុខងារគណនាRTSS(ចម្ងាយ, ពេលវេលានាទី, ftpMetersPerMin) {
  // គណនាល្បឿនរត់ធម្មតា។
  const nss = ចម្ងាយ / ម៉ោងនាទី;

  // គណនាកត្តាអាំងតង់ស៊ីតេ
  const intensityFactor = nss / ftpMetersPerMin;

  // គណនាម៉ោង
  ម៉ោង const = timeminutes / 60;

  // គណនា rTSS ដោយប្រើកត្តាអាំងតង់ស៊ីតេ quadratic
  const rtss = Math.pow(អាំងតង់ស៊ីតេកត្តា, 2) * ម៉ោង * 100;

  ត្រឡប់ Math.round(rtss);
}

// ឧទាហរណ៍ការប្រើប្រាស់៖
const rtss = គណនាRTSS(3000, 55, 64.5);
// ត្រឡប់ៈ ៦៥

// អ្នកជំនួយ៖ បំប្លែង CRS ល្បឿនទៅល្បឿនរត់ (m/min)
មុខងារ crsPaceToSpeed(crsPacePerKmSeconds) {
  // ល្បឿនក្នុង m/min = 1000m / (ល្បឿនក្នុងមួយនាទី)
  ត្រឡប់ 1000 / (crsPacePerKmSeconds / 60);
}

// ឧទាហរណ៍៖ CRS នៃ 4:15 (255 វិនាទី)
ល្បឿន const = crsPaceToSpeed(255); // ត្រឡប់: 235.3 m/min

ប្រសិទ្ធភាពជីវមេកានិច៖ សមាមាត្របញ្ឈរ

រូបមន្ត៖

Vertical Ratio (%) = (Vertical Oscillation ÷ Stride Length) × 100

🧪 ការគណនាអន្តរកម្ម - សាកល្បងរូបមន្ត

សមាមាត្របញ្ឈរ៖
7.4%
ការគណនា៖
សមាមាត្របញ្ឈរ = (8.5 / 115) × 100 = 7.4%

ការអនុវត្ត JavaScript៖

អនុគមន៍គណនាVerticalRatio(oscillationCm, strideLengthCm) {
  ត្រឡប់ (oscillationCm / strideLengthCm) * 100;
}

មុខងារគណនាEfficiencyFactor(paceMetersPerMin, avgHeartRate) {
  ត្រឡប់ paceMetersPerMin / avgHeartRate;
}

មេកានិកស្ទ្រីម

អត្រាបោះជំហាន (SR)

រូបមន្ត៖

SR = 60 / ពេលវេលាវដ្ត (វិនាទី)
SR = (ចំនួនជំហាន/ពេលវេលាគិតជាវិនាទី) × 60

🧪 ការគណនាអន្តរកម្ម - សាកល្បងរូបមន្ត

Cadence (SPM):
១៨០
ការគណនា៖
Cadence = (180/60) × 60 = 180 SPM

ការអនុវត្ត JavaScript៖

មុខងារគណនាCadence(ចំនួនជំហាន, វិនាទី) {
  ត្រឡប់ (stepCount / timeSeconds) * 60;
}

// ឧទាហរណ៍៖
const spm = គណនាCadence(180, 60);
// ត្រឡប់៖ 180 SPM

ប្រវែងជើង

រូបមន្ត៖

ប្រវែងជំហាន = ចម្ងាយ / (ជំហានរាប់ / 2)
ប្រវែងជំហាន = ល្បឿន / (Cadence / 120)

ការអនុវត្ត JavaScript៖

អនុគមន៍គណនាប្រវែងខ្សែប្រវែង (ចម្ងាយម៉ែត្រ, ចំនួនជំហាន) {
  // ប្រវែងជំហានគឺចម្ងាយ / ចំនួននៃជំហានជំហាន (ឆ្វេង + ស្តាំ)
  ត្រឡប់ចម្ងាយម៉ែត្រ / (stepCount / 2);
}

// ឧទាហរណ៍ (1000m, 800 ជំហាន):
const strideLength = គណនាStrideLength(1000, 800);
// ត្រឡប់ៈ 2.50 ម៉ែត្រក្នុងមួយជំហាន

ល្បឿនពី SR និង DPS

រូបមន្ត៖

ល្បឿន (m/s) = (SR/60) × DPS

ការអនុវត្ត JavaScript៖

មុខងារគណនាល្បឿន(strideRate, dps) {
  ត្រឡប់ (strideRate / 60) * dps;
}

// ឧទាហរណ៍៖
const velocity = គណនាល្បឿន(70, 1.6);
// ត្រឡប់: 1.87 m/s

Stride Index (SI)

រូបមន្ត៖

SI = ល្បឿន (m/s) × DPS (m/stride)

ការអនុវត្ត JavaScript៖

មុខងារគណនាStrideIndex(ល្បឿន, dps) {
  ល្បឿនត្រឡប់ * dps;
}

// ឧទាហរណ៍៖
const si = គណនាStrideIndex(1.5, 1.7);
// ត្រឡប់៖ 2.55

តារាងគ្រប់គ្រងការអនុវត្ត (PMC)

CTL, ATL, TSB ការគណនា

រូបមន្ត៖

CTL ថ្ងៃនេះ = CTL ម្សិលមិញ + (TSS ថ្ងៃនេះ - CTL ម្សិលមិញ) × (1/42)
ATL ថ្ងៃនេះ = ATL ម្សិលមិញ + (TSS ថ្ងៃនេះ - ATL ម្សិលមិញ) × (1/7)
TSB= CTL ម្សិលមិញ - ATL ម្សិលមិញ

ការអនុវត្ត JavaScript៖

មុខងារអាប់ដេតCTL(ពីមុនCTL, todayTSS) {
  ត្រឡប់ PreviousCTL + (ថ្ងៃនេះTSS - PreviousCTL) * (1/42);
}

មុខងារអាប់ដេតATL(ពីមុនATL, todayTSS) {
  ត្រឡប់ PreviousATL + (ថ្ងៃនេះTSS - PreviousATL) * (1/7);
}

មុខងារគណនាTSB(ម្សិលមិញCTL, ម្សិលមិញATL) {
  ត្រឡប់ម្សិលមិញCTL - ម្សិលមិញATL;
}

// គណនា PMC សម្រាប់ស៊េរីនៃការហាត់ប្រាណ
មុខងារគណនាPMC(ការហាត់ប្រាណ) {
  អនុញ្ញាតឱ្យ ctl = 0, atl = 0;
  លទ្ធផល const = [];

  workouts.forEach(ហាត់ប្រាណ => {
    ctl = updateCTL(ctl, workout.tss);
    atl = updateATL(atl, workout.tss);
    const tsb = គណនាTSB(ctl, atl);

    results.push({
      កាលបរិច្ឆេទ៖ workout.date,
      tss: workout.tss,
      ctl: Math.round(ctl * 10) / 10,
      atl: Math.round(atl * 10) / 10,
      tsb: Math.round(tsb * 10) / 10
    });
  });

  លទ្ធផលត្រឡប់មកវិញ;
}

// ឧទាហរណ៍ការប្រើប្រាស់៖
លំហាត់ const = [
  { កាលបរិច្ឆេទ៖ '2025-01-01', tss: 50 },
  { កាលបរិច្ឆេទ៖ '2025-01-02', tss: 60 },
  {កាលបរិច្ឆេទ៖ '2025-01-03', tss: 45 },
  // ... លំហាត់ច្រើនទៀត
];

const pmc = គណនាPMC(ការហាត់ប្រាណ);
// ត្រឡប់អារេជាមួយ CTL, ATL, TSB សម្រាប់មួយថ្ងៃៗ

ការគណនាកម្រិតខ្ពស់

CRS ពីចម្ងាយច្រើន (វិធីសាស្ត្រតំរែតំរង់)

ការអនុវត្ត JavaScript៖

មុខងារគណនាCRRSRegression(ចម្ងាយ, ដង) {
  // តំរែតំរង់លីនេអ៊ែរ៖ ចម្ងាយ = 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 ជម្រាល = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
  const intercept = (sumY - ជម្រាល * sumX) / n;

  ត្រឡប់ {
    crs: ជម្រាល // ល្បឿនដំណើរការសំខាន់ (m/s)
    សមត្ថភាព anaerobic: ស្ទាក់ចាប់ // សមត្ថភាពចំងាយ anaerobic (m)
  };
}

// ឧទាហរណ៍ជាមួយចម្ងាយសាកល្បងច្រើន៖
ចម្ងាយ const = [100, 200, 400, 800];
const ដង = [65, 150, 340, 720]; // នៅក្នុងវិនាទី
លទ្ធផល const = គណនាCRRSRegression(ចម្ងាយ, ដង);
// ត្រឡប់៖ { crs: 1.18, anaerobic_capacity: 15.3 }

កត្តាអាំងតង់ស៊ីតេពីផេស

ការអនុវត្ត JavaScript៖

មុខងារគណនាIntensityFactor(actualPaceMinKm, thresholdPaceMinKm) {
  // បំលែងខ្សែអក្សរល្បឿន "mm:ss" ទៅជាវិនាទីបើចាំបាច់
  const actualSecs = typeof actualPaceMinKm === 'ខ្សែអក្សរ' ? timeToSeconds(actualPaceMinKm) : realPaceMinKm;
  const thresholdSecs = typeof thresholdPaceMinKm === 'string' ? timeToSeconds(thresholdPaceMinKm) : thresholdPaceMinKm;

  // IF គឺជាកម្រិតចាប់ផ្ដើម / ល្បឿនពិត (ល្បឿនលឿន = តម្លៃវិនាទីតូចជាង)
  ត្រឡប់ thresholdSecs / realSecs;
}

// ឧទាហរណ៍៖
const if_value = គណនាIntensityFactor("4:45", "4:15");
// ត្រឡប់៖ 0.895 (ដំណើរការនៅ 89.5% នៃកម្រិត)

Pace Consistency Analysis

ការអនុវត្ត JavaScript៖

ការវិភាគមុខងារPaceConsistency(ផ្នែក) {
  const paces = segments.map(km => kilometer.distance / kilometer.time);
  const avgPace = paces.reduce((a, b) => a + b) / paces.length;

  const variance = paces.reduce((sum, pace) =>
    ផលបូក + Math.pow(pace - avgPace, 2), 0) / paces.length;
  const stdDev = Math.sqrt(វ៉ារ្យង់);
  const coefficientOfVariation = (stdDev / avgPace) * 100;

  ត្រឡប់ {
    avgPace,
    stdDev,
    មេគុណបំរែបំរួល,
    ភាពជាប់លាប់៖ coefficientOfVariation < 5 ? "ល្អឥតខ្ចោះ":
                 coefficientOfVariation < 10 ? "ល្អ":
                 coefficientOfVariation < 15 ? "មធ្យម": "អថេរ"
  };
}

// ឧទាហរណ៍៖
ផ្នែក const = [
  { ចម្ងាយ៖ ១០០, ពេលវេលា៖ ៧០ },
  { ចម្ងាយ៖ ១០០, ពេលវេលា៖ ៧២ },
  { ចម្ងាយ៖ ១០០, ពេលវេលា៖ ៧១ },
  //...
];
const analysis = វិភាគPaceConsistency(segments);
// ត្រឡប់៖ { avgPace: 1.41, stdDev: 0.02, coefficientOfVariation: 1.4, ភាពស៊ីសង្វាក់គ្នា៖ "ល្អឥតខ្ចោះ" }

ការរកឃើញភាពអស់កម្លាំងពីប្រសិទ្ធភាពនៃជំហាន

ការអនុវត្ត JavaScript៖

មុខងាររកឃើញភាពអស់កម្លាំង (ផ្នែក) {
  // ប្រៀបធៀបសមាមាត្របញ្ឈរនៃផ្នែកទីមួយ និងចុងក្រោយ
  const firstSegment = ចម្រៀក[0];
  const lastSegment = ចម្រៀក[segments.length - 1];

  const ratioIncrease = lastSegment.verticalRatio - firstSegment.verticalRatio;

  ត្រឡប់ {
    សមាមាត្រចាប់ផ្តើម៖ firstSegment.verticalRatio,
    សមាមាត្រចុងក្រោយ៖ lastSegment.verticalRatio,
    ការកើនឡើង៖ Math.round(សមាមាត្របង្កើន * 10) / 10,
    ភាពអស់កម្លាំងកម្រិត៖ សមាមាត្រកើនឡើង < 0.2 ? "អប្បបរមា"៖
                  សមាមាត្រកើនឡើង < 0.5 ? "មធ្យម"៖
                  សមាមាត្រកើនឡើង < 1.0 ? "សំខាន់": "ធ្ងន់ធ្ងរ"
  };
}

// ឧទាហរណ៍៖
ផ្នែក const = [
  { verticalRatio: 7.2 }, { verticalRatio: 7.3 }, { verticalRatio: 8.1 }
];
const fatigue = រកឃើញភាពអស់កម្លាំង(ផ្នែក);
// ត្រឡប់៖ { startRatio: 7.2, endRatio: 8.1, កើនឡើង: 0.9, fatigueLevel: "Significant" }

សុពលភាពទិន្នន័យ

ការត្រួតពិនិត្យគុណភាពទិន្នន័យ Workout

ការអនុវត្ត JavaScript៖

មុខងារ validateWorkoutData (ហាត់ប្រាណ) {
  បញ្ហា const = [];

  // ពិនិត្យ​មើល​ជួរ​ល្បឿន​សម​ហេតុ​ផល (3:00-8:00 ក្នុង​មួយ​គីឡូម៉ែត្រ)
  const avgPaceSecs = workout.totalTime / (workout.totalDistance / 1000);
  ប្រសិនបើ (avgPaceSecs < 180 || avgPaceSecs > 480) {
    issue.push(`ល្បឿនមធ្យមមិនធម្មតា៖ ${Math.round(avgPaceSecs)}s ក្នុងមួយគីឡូម៉ែត្រ`);
  }

  // ពិនិត្យរកសមាមាត្របញ្ឈរសមហេតុផល (4% - 15%)
  ប្រសិនបើ (workout.avgVerticalRatio < 4 || workout.avgVerticalRatio > 15) {
    issues.push(`សមាមាត្របញ្ឈរមិនធម្មតា៖ ${workout.avgVerticalRatio}%`);
  }

  // ពិនិត្យ​មើល​ចង្វាក់​ដែល​សម​ហេតុផល (120-220 SPM)
  const avgCadence = គណនាCadence(workout.totalSteps, workout.totalTime);
  ប្រសិនបើ (avgCadence < 120 || avgCadence > 220) {
    issues.push(`Unusual cadence: ${Math.round(avgCadence)} SPM`);
  }

  // ពិនិត្យមើលផ្នែកដែលបាត់ (ចន្លោះពេល)
  ប្រសិនបើ (workout.segments && workout.segments.length > 1) {
    សម្រាប់ (អនុញ្ញាតឱ្យ i = 1; i < workout.segments.length; i++) {
      const gap = workout.segments[i].startTime -
                  (workout.segments[i-1].startTime + workout.segments[i-1].duration);
      ប្រសិនបើ (គម្លាត> 300) { // គម្លាត 5 នាទី។
        issue.push(`គម្លាតធំត្រូវបានរកឃើញរវាងផ្នែក ${i} និង ${i+1}`);
      }
    }
  }

  ត្រឡប់ {
    isValid: issues.length === 0,
    បញ្ហា
  };
}

// ឧទាហរណ៍៖
const workout = {
  ចម្ងាយសរុប៖ ២០០០,
  ពេលវេលាសរុប: 1800, // 30 នាទី។
  សរុប៖ ៨០០,
  ផ្នែក៖ [/* ទិន្នន័យគីឡូម៉ែត្រ */]
};
const validation = validateWorkoutData(ការហាត់ប្រាណ);
// ត្រឡប់៖ { ត្រឹមត្រូវ៖ ពិត បញ្ហា៖ [] }

មុខងារជំនួយ

ឧបករណ៍បំប្លែងពេលវេលា

ការអនុវត្ត JavaScript៖

// បំប្លែង mm:ss ទៅជាវិនាទី
មុខងារ timeToSeconds(timeString) {
  ផ្នែក const = timeString.split(':');
  ត្រឡប់ parseInt(parts[0]) * 60 + parseInt(parts[1]);
}

// បំប្លែងវិនាទីទៅជា mm:ss
មុខងារ secondsToTime(វិនាទី) {
  នាទី const = Math.floor(វិនាទី / 60);
  const secs = Math.round(វិនាទី % 60);
  ត្រឡប់ `${minutes}:${secs.toString().padStart(2, '0')}`;
}

// បំប្លែងវិនាទីទៅជា hh:mm:ss
មុខងារ secondsToTimeDetailed(វិនាទី) {
  const ម៉ោង = Math.floor(វិនាទី / 3600);
  const នាទី = Math.floor((វិនាទី % 3600) / 60);
  const secs = Math.round(វិនាទី % 60);
  ត្រឡប់ `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
}

// ឧទាហរណ៍៖
timeToSeconds("1:33"); // ត្រឡប់៖ ៩៣
secondsToTime(93); // ត្រឡប់: "1:33"
secondsToTimeDetailed(៣៦៦៥); // ត្រឡប់៖ "1:01:05"

ធនធានអនុវត្ត

រូបមន្តទាំងអស់នៅលើទំព័រនេះគឺត្រៀមខ្លួនជាស្រេចក្នុងការផលិត និងមានសុពលភាពប្រឆាំងនឹងអក្សរសិល្ប៍វិទ្យាសាស្រ្ត។ ប្រើ ពួកវាសម្រាប់ឧបករណ៍វិភាគផ្ទាល់ខ្លួន ការផ្ទៀងផ្ទាត់ ឬការយល់ដឹងកាន់តែស៊ីជម្រៅនៃការគណនាដំណើរការដែលកំពុងដំណើរការ។

💡 ការអនុវត្តល្អបំផុត

  • ធ្វើឱ្យធាតុចូលមានសុពលភាព៖ពិនិត្យរកជួរសមហេតុផល មុននឹងគណនា
  • ដោះស្រាយករណីគែម៖ការបែងចែកដោយសូន្យ តម្លៃអវិជ្ជមាន ទិន្នន័យទទេ
  • មូលសមគួរ៖CTL/ATL/TSB ទៅ 1 ទសភាគ rTSS ទៅចំនួនគត់
  • ភាពជាក់លាក់នៃហាង៖រក្សាភាពជាក់លាក់ពេញលេញនៅក្នុងមូលដ្ឋានទិន្នន័យ ជុំសម្រាប់ការបង្ហាញ
  • សាកល្បងហ្មត់ចត់៖ប្រើទិន្នន័យល្អដែលគេស្គាល់ ដើម្បីផ្ទៀងផ្ទាត់ការគណនា