Fix bug in line zoning by using less ambitious algorithm
This commit is contained in:
+8
-2
@@ -29,6 +29,9 @@ import Data.List
|
||||
import qualified Data.IntMap.Strict as IM
|
||||
import qualified Data.IntSet as IS
|
||||
|
||||
--flattenZones :: Zone (IM.IntMap a) -> IM.IntMap a
|
||||
--flattenZones = flattenIMIMIM . _znObjects
|
||||
|
||||
zoneSize :: Float
|
||||
zoneSize = 50
|
||||
|
||||
@@ -68,10 +71,12 @@ zoneOfLine (V2 aa ab) (V2 ba bb)
|
||||
$ digitalLine (zoneOfPoint (V2 aa ab)) (zoneOfPoint (V2 ba bb))
|
||||
where
|
||||
f (x,y) = [(p,r) | p <-[x-1,x,x+1] , r<-[y-1,y,y+1]]
|
||||
--f (x,y) = [(p,r) | p <-[x-2..x+2] , r<-[y-2..y+2]]
|
||||
|
||||
zoneOfLineIntMap :: Point2 -> Point2 -> IM.IntMap IS.IntSet
|
||||
--{-# INLINE zoneOfLineIntMap #-}
|
||||
zoneOfLineIntMap = ddaExt zoneSize
|
||||
--zoneOfLineIntMap = ddaExt zoneSize
|
||||
zoneOfLineIntMap = ddaSq zoneSize
|
||||
|
||||
zoneOfCircle :: Point2 -> Float -> [(Int,Int)]
|
||||
zoneOfCircle p r = concatMap zoneNearPoint $ divideCircle (1.5 * zoneSize) p r
|
||||
@@ -148,7 +153,8 @@ cloudsNearPoint p w = f (IM.lookup x (_znObjects $ _cloudsZone w) >>= IM.lookup
|
||||
-- within this function
|
||||
wallsAlongLine :: Point2 -> Point2 -> World -> IM.IntMap Wall
|
||||
--{-# INLINE wallsAlongLine #-}
|
||||
wallsAlongLine a b w = IM.foldlWithKey' g IM.empty kps
|
||||
wallsAlongLine a b w =
|
||||
IM.foldlWithKey' g IM.empty kps
|
||||
where
|
||||
g m x s = IM.union (IM.unions (IM.restrictKeys (f x $ _znObjects $ _wallsZone w) s)) m
|
||||
kps = zoneOfLineIntMap a b
|
||||
|
||||
Reference in New Issue
Block a user