module Diagrams.Points
(
Point (..), origin, (*.)
, centroid
, pointDiagram
, _Point, lensP
) where
import Diagrams.Core (pointDiagram)
import Diagrams.Core.Points
import Data.Foldable as F
import Linear.Affine
import Linear.Vector
centroid :: (Additive v, Fractional n) => [Point v n] -> Point v n
centroid :: forall (v :: * -> *) n.
(Additive v, Fractional n) =>
[Point v n] -> Point v n
centroid [] = forall (f :: * -> *) a. (Additive f, Num a) => Point f a
origin
centroid [Point v n]
ps = forall (f :: * -> *) (v :: * -> *) a.
(Foldable f, Additive v, Fractional a) =>
f (v a) -> v a
meanV [Point v n]
ps
{-# INLINE centroid #-}
meanV :: (Foldable f, Additive v, Fractional a) => f (v a) -> v a
meanV :: forall (f :: * -> *) (v :: * -> *) a.
(Foldable f, Additive v, Fractional a) =>
f (v a) -> v a
meanV = forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall (f :: * -> *) a.
(Functor f, Fractional a) =>
f a -> a -> f a
(^/) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
F.foldl' (\(v a
s,a
c) v a
e -> (v a
e forall (f :: * -> *) a. (Additive f, Num a) => f a -> f a -> f a
^+^ v a
s,a
cforall a. Num a => a -> a -> a
+a
1)) (forall (f :: * -> *) a. (Additive f, Num a) => f a
zero,a
0)
{-# INLINE meanV #-}