MCPcopy Create free account
hub / github.com/RustCV/RustCV / recalculate_regression

Method recalculate_regression

rustcv-core/src/time.rs:84–113  ·  view source on GitHub ↗

简单的最小二乘法实现

(&mut self)

Source from the content-addressed store, hash-verified

82
83 /// 简单的最小二乘法实现
84 fn recalculate_regression(&mut self) {
85 let n = self.history.len() as f64;
86 let (base_hw, base_sys) = self.history.front().unwrap();
87 let base_sys_scalar = self.instant_to_scalar(*base_sys);
88
89 let mut sum_x = 0.0;
90 let mut sum_y = 0.0;
91 let mut sum_xy = 0.0;
92 let mut sum_xx = 0.0;
93
94 for (hw, sys) in &self.history {
95 let x = (*hw as f64) - (*base_hw as f64);
96 let y = self.instant_to_scalar(*sys) - base_sys_scalar;
97
98 sum_x += x;
99 sum_y += y;
100 sum_xy += x * y;
101 sum_xx += x * x;
102 }
103
104 let denominator = n * sum_xx - sum_x * sum_x;
105 if denominator.abs() < 1e-6 {
106 // 避免除零 (比如时间戳完全没变)
107 self.estimated_slope = 1.0;
108 self.estimated_offset = 0.0;
109 } else {
110 self.estimated_slope = (n * sum_xy - sum_x * sum_y) / denominator;
111 self.estimated_offset = (sum_y * sum_xx - sum_x * sum_xy) / denominator;
112 }
113 }
114
115 // 辅助:将 Instant 转为 f64 (秒), 仅用于计算差值
116 fn instant_to_scalar(&self, t: Instant) -> f64 {

Callers 1

correctMethod · 0.80

Calls 1

instant_to_scalarMethod · 0.80

Tested by

no test coverage detected