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}