mod affine;
mod chain;
mod linear;
mod rotation;
mod shift;
mod scale;
mod moebius;
pub use affine::*;
pub use chain::*;
pub use linear::*;
pub use rotation::*;
pub use shift::*;
pub use scale::*;
pub use moebius::*;
pub trait Transform<T> {
fn identity() -> Self;
fn inv(self) -> Self;
fn apply(&self, pos: T) -> T;
fn deriv(&self, pos: T, dir: T) -> T;
fn chain(self, other: Self) -> Self;
}
pub trait Directional<T>: Transform<T> {
fn apply_dir(&self, pos: T, dir: T) -> T;
fn apply_normal(&self, pos: T, normal: T) -> T;
}