packages feed

gjk2d-0.1.0.0: test/Spec.hs

import Data.Function
import Data.List
import GJK
import Linear

main :: IO ()
main = do
  let terr = V2 <$> [0.1,0.2 .. 10] <*> [0.1,0.2 .. 10]
  -- let polygons = (\v1 v2 v3 v4 -> [v1, v2, v3, v4]) <$> terr <*> terr <*> terr <*> terr
  let cirtest =
        (\cir1 cir2 ->
           ((cir1, cir2), convexIntersect (circle cir1) (circle cir2))) <$>
        terr <*>
        terr
  -- traverse (\s -> if snd s then print (fst s) else return ()) cirtest
  print $ length $ filter snd $ cirtest
  -- print $ convexIntersect (circle $ V2 0.2 7.2) (circle $ V2 0.1 9.1)
  print $
    (uncurry (convexIntersect `on` fromPolygon)) <$>
    [(poly1, poly2), (poly1, poly3), (poly2, poly3), (poly1, poly4)]
  print $ convexIntersect circle2 (fromPolygon poly3)
  print $ convexIntersect circle1 (fromPolygon poly3)

fromPolygon :: [V2 Double] -> Convex
fromPolygon vs = Convex $ \d -> maximumBy (compare `on` dot (angle d)) vs

poly1 = [V2 1 1, V2 1 0, V2 0 1, V2 0 0]

poly2 = fmap (+ 0.5) <$> [V2 1 1, V2 1 0, V2 0 1, V2 0 0]

poly3 = (+ 1) <$> [V2 1 1, V2 1 0, V2 0 1, V2 0 0]

poly4 = (+ 1.5) <$> [V2 1 1, V2 1 0, V2 0 1, V2 0 0]

circle1 = Convex $ \d -> angle d

circle2 = Convex $ \d -> angle d + V2 0.5 0

circle pos = Convex $ \d -> angle d + pos