angle must not be horizontal, otherwise we get singularities
authorJoachim Breitner <mail@joachim-breitner.de>
Wed, 18 Feb 2009 22:32:40 +0000 (23:32 +0100)
committerJoachim Breitner <mail@joachim-breitner.de>
Wed, 18 Feb 2009 22:32:40 +0000 (23:32 +0100)
src/Lseed/Geometry.hs
src/main.hs

index a25c035..219302e 100644 (file)
@@ -76,13 +76,15 @@ allKindsOfStuffWithAngle :: forall a. Double -> [(Line, a)] ->
 allKindsOfStuffWithAngle angle lines = (lighted, polygons)
   where projectLine :: Line -> (Double, Double)
         projectLine (p1, p2) = (projectPoint p1, projectPoint p2)
+       projectTan :: Double
+       projectTan = 1 / tan (pi-angle)
        projectPoint :: Point -> Double
-       projectPoint (x,y) = x + y * 1 / tan (pi-angle)
+       projectPoint (x,y) = x + y * projectTan
        
        -- False means Beginning of Line
        sweepPoints :: [(Double, Bool, (Line, a))]
        sweepPoints = sortBy (comparing (\(a,b,_)->(a,b))) $ concatMap (\l@((p1,p2),i) -> 
-                       if projectPoint p1 == projectPoint p2
+                       if abs (projectPoint p1 - projectPoint p2) < eps
                        then []
                        else if projectPoint p1 < projectPoint p2
                             then [(projectPoint p1,False,l), (projectPoint p2,True,l)]
index b2e6c69..2431549 100644 (file)
@@ -29,7 +29,7 @@ main = do
                renderGarden $ \later -> 
                        let timeDiff = timeSpanFraction now later
                             timeInfo = printf "Day %d (%2.0f%%)" day (timeDiff*100)
-                           angle = timeDiff * pi
+                           angle = pi/100 + timeDiff * (98*pi/100)
                            gardenNow = applyGrowth timeDiff garden'
                        in ScreenContent gardenNow angle timeInfo