pub trait AnyPoint: Copy + Clone + Default + PartialEq + Add<Output = Self> + Sub<Output = Self> {
type Num: AnyNum;
fn x(&self) -> Self::Num;
fn y(&self) -> Self::Num;
fn mul(self, rhs: Self::Num) -> Self;
fn div(self, rhs: Self::Num) -> Self;
}