Improve dual lasers
This commit is contained in:
+7
-4
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user