haar_lib/math/linear.rs
1//! $y = ax + b$の直線
2use std::ops::{Add, Mul, Sub};
3
4/// $y = ax + b$の直線を表す。
5#[derive(Clone, Debug)]
6pub struct Linear<T> {
7 /// 直線の傾き
8 pub a: T,
9 /// 直線のy切片
10 pub b: T,
11}
12
13impl<T: Add<Output = T> + Mul<Output = T> + Copy> Linear<T> {
14 /// `x`に値を代入した結果を返す。
15 pub fn apply(&self, x: T) -> T {
16 self.a * x + self.b
17 }
18}
19
20impl<T: Sub<Output = T> + Mul<Output = T> + Copy> Linear<T> {
21 /// x方向に`dx`だけ平行移動した直線を返す。
22 pub fn mov_x(&self, dx: T) -> Self {
23 Self {
24 a: self.a,
25 b: self.b - self.a * dx,
26 }
27 }
28}