Improve dual lasers

This commit is contained in:
2022-04-06 13:42:35 +01:00
parent 396146f3b4
commit bd255d2e54
5 changed files with 25 additions and 15 deletions
+7 -4
View File
@@ -23,6 +23,7 @@ import Data.Maybe
--import Data.Function
import qualified Data.IntMap.Strict as IM
import qualified Data.Map.Strict as M
import Control.Applicative
--import qualified Data.Set as S
--import Data.Monoid
--import System.Random
@@ -170,15 +171,16 @@ intersectBeamBeams :: Beam -> [Beam]
intersectBeamBeams bm bms = f [] $ _bmPoints bm
where
f ps (x:y:ys) = case intersectSegBeams x y bms of
Just (z,a) -> ((z:x:ps), Just (z,(x,y,bm),a))
Just (z,a) -> (z:x:ps, Just (z,(x,y,bm),a))
Nothing -> f (x:ps) (y:ys)
f ps (x:[]) = (x:ps, Nothing)
f ps [x] = (x:ps, Nothing)
f _ _ = error "made an empty beam"
intersectSegBeams :: Point2 -> Point2 -> [Beam] -> Maybe (Point2,(Point2,Point2,Beam))
intersectSegBeams sp ep (bm:bms) = case intersectSegBeam sp ep bm of
Nothing -> intersectSegBeams sp ep bms
Just a@(z,_) -> maybe (Just a) Just $ intersectSegBeams sp z bms
--Just a@(z,_) -> maybe (Just a) Just $ intersectSegBeams sp z bms
Just a@(z,_) -> intersectSegBeams sp z bms <|> Just a
intersectSegBeams _ _ _ = Nothing
intersectSegBeam :: Point2 -> Point2 -> Beam -> Maybe (Point2,(Point2,Point2,Beam))
@@ -188,7 +190,8 @@ intersectSegBeam sp ep bm = case intersectSegSegs' sp ep (_bmPoints bm) of
intersectSegSegs' :: Point2 -> Point2 -> [Point2] -> Maybe (Point2,Point2,Point2)
intersectSegSegs' sp ep (x:y:ys) = case intersectSegSeg sp ep x y of
Just z -> maybe (Just (z,x,y)) Just $ intersectSegSegs' sp z (y:ys)
--Just z -> maybe (Just (z,x,y)) Just $ intersectSegSegs' sp z (y:ys)
Just z -> intersectSegSegs' sp z (y:ys) <|> Just (z,x,y)
Nothing -> intersectSegSegs' sp ep (y:ys)
intersectSegSegs' _ _ _ = Nothing