From d9584d5877f428928dd562a169f81763d8f63902 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Mon, 3 Jun 2019 09:15:21 -0400 Subject: Fix bug in subdivideCurve. --- Bezier.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Bezier.hs b/Bezier.hs index ed464d8..941ad5b 100644 --- a/Bezier.hs +++ b/Bezier.hs @@ -19,6 +19,7 @@ data Polygonization = Polygonization , curveStartIndex :: Int , curveSegmentCount :: Int } + deriving Show type AllocatedRange = Polygonization @@ -37,12 +38,13 @@ xz :: Vector Float -> (Float,Float) xz v = (v!0, v!2) subdivideCurve :: Monad m => Float -> Curve -> AllocatedRange -> StorePoint m -> m Polygonization +subdivideCurve δ curve range store | curveSegmentCount range < 2 = return range { curveSegmentCount = 0 } subdivideCurve δ curve range store = do let ts = sort $ take (curveSegmentCount range - 2) $ sampleCurve δ curve - n <- (\f -> foldr f (return 0) (zip [0..] (0 : ts))) $ \(i,t) _ -> do + n <- (\f -> foldr f return (zip [0..] (0 : ts)) 0) $ \(i,t) ret _ -> do let v = bezierEval curve t store (curveBufferID range) (curveStartIndex range + i) v - return i + ret i let v = bezierEval curve 1.0 store (curveBufferID range) (curveStartIndex range + n + 1) v return range { curveSegmentCount = n + 2 } -- cgit v1.2.3