#![feature(unboxed_closures)]
#![feature(fn_traits)]
#![feature(adt_const_params)]
#![feature(portable_simd)]
#![feature(associated_type_defaults)]
#![allow(incomplete_features)]
#![allow(non_upper_case_globals)]
mod dual;
mod point;
mod line;
mod branch;
mod horizon;
mod plane;
mod motor;
mod rotor;
mod direction;
mod translator;
pub const pi:f32 = std::f32::consts::PI;
pub const tau:f32 = pi*2.0;
use std::ops::{Add, Div, Mul, Sub};
pub use dual::{Dual, dual};
pub use point::*;
pub use line::{Line,line};
pub use branch::{Branch,branch};
pub use horizon::{Horizon,horizon};
pub use plane::*;
pub use motor::{Motor,motor};
pub use rotor::{EulerAngles,Rotor,rotor};
pub use direction::{Direction};
pub use translator::{Translator,translator};
pub(crate) mod maths;
#[cfg(feature = "renderer")] mod render;
mod bag;
#[cfg(feature = "renderer")] pub use render::{Renderer,Color};
pub trait PoincareDual {}
pub trait GeometricProduct {}
pub trait JoinProduct {}
pub trait MeetProduct {}
pub trait SandwichProduct {}
pub trait InnerProduct {}
pub trait ScalarProduct: Mul + Div + Sized {
type Output;
fn mul(self,k:f32)->Self;
fn div(self,k:f32)->Self;
}
pub trait SumProduct: Add + Sub + Sized {
type Output=Self;
fn add(self,k:Self)->Self;
}