module Geom2d.Shape
    ( Shape
    , Spatial (..)
    , circle
    , rectangle
    , convexHull
    )

where

import Geom2d.Point
import Geom2d.Rotation
import Geom2d.Shape.Internal
import Geom2d.Translate

circle :: Num a => p a -> a -> Shape p a
circle m r = ShapeCircle $ mkCircleInt m r

rectangle :: (Translate p, Eq a, RealFloat a, Point p, Rotation p) =>
             p a -> a -> a -> Maybe (Shape p a)
rectangle m a b = ShapePolygon <$> rectangleInt m a b

convexHull :: (Num (p a), Fractional a, Ord a, Scale p, Point p) =>
              [p a] -> Maybe (Shape p a)
convexHull list = ShapePolygon <$> convexHull' list