{-# LANGUAGE DataKinds, TypeFamilies, FlexibleContexts, FlexibleInstances, PolyKinds #-} {-# LANGUAGE UndecidableInstances, MultiParamTypeClasses #-} module Graphics.Drawings where import Graphics.Gloss import Polynomial.Monomial import Polynomial.Prelude import Polynomial.Hypersurface import Geometry.ConvexHull2 (Point2D) fromPoint2D :: Point2D -> Point fromPoint2D (x,y) = (fromIntegral x, fromIntegral y) tupleToList :: (Point2D, Point2D) -> [Point] tupleToList (p1, p2) = [fromPoint2D p1, fromPoint2D p2] makeFig :: (IsMonomialOrder ord, Ord k, Integral k) => Polynomial k ord n -> IO () makeFig poly = let figure = color blue $ Pictures $ map (Line . tupleToList) (hypersurface poly) scaled = scale 10.0 10.0 figure in display (InWindow "My Window" (400, 400) (10, 10)) white scaled makeFigs :: (IsMonomialOrder ord, Ord k, Integral k) => [Polynomial k ord n] -> IO() makeFigs polys = let colors = [red, green, blue, yellow, cyan, magenta, rose, violet, azure, aquamarine, chartreuse, orange] figures = map (Pictures . map (Line . tupleToList) . hypersurface) polys putColors = zipWith color colors figures scaled = scale 10.0 10.0 (Pictures putColors) in display (InWindow "Tropical curves" (400, 400) (10,10)) white scaled