1pub use self::{
2 ellipse_like::{Ball, Circle, Circle3D, Ellipse, Ellipse3D},
3 line::{Line, Line3D, Vector, Vector3D},
4 point::{Point, Point3D},
5 polygon_like::Polygon,
6 rectangle_like::{Parallelogram, Rectangle, Square},
7 triangle::Triangle,
8};
9use crate::Distance;
10use num_traits::{real::Real, Float, FloatConst, Num, One, Pow, Zero};
11use projective::Projective;
12use serde::{Deserialize, Serialize};
13use std::ops::Add;
14
15mod ellipse_like;
16mod line;
17mod point;
18mod polygon_like;
19mod rectangle_like;
20mod triangle;
21
22#[inline(always)]
23fn zero<T: Zero>() -> T {
24 T::zero()
25}
26
27#[inline(always)]
28fn one<T: One>() -> T {
29 T::one()
30}
31
32#[inline(always)]
33fn two<T>() -> T
34where
35 T: One + Add<Output = T>,
36{
37 T::one() + T::one()
38}
39
40#[inline(always)]
41fn pi<T: FloatConst>() -> T {
42 T::PI()
43}
44
45#[inline(always)]
46fn two_pi<T>() -> T
47where
48 T: One + FloatConst + Add<Output = T>,
49{
50 two::<T>() * pi()
51}