add siOffset and siHeight
authorJoachim Breitner <mail@joachim-breitner.de>
Sun, 7 Jun 2009 22:09:33 +0000 (00:09 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Sun, 7 Jun 2009 22:09:33 +0000 (00:09 +0200)
src/Lseed/Data.hs
src/Lseed/StipeInfo.hs

index 745be5b..c3db176 100644 (file)
@@ -57,6 +57,8 @@ data StipeInfo = StipeInfo
        , siAngle     :: Angle
        , siDirection :: Angle
        , siGrowth    :: GrowthState
+       , siOffset    :: Double -- ^ Sideways position, relative to Plant origin
+       , siHeight    :: Double -- ^ Vertical distance from bottom
        }
        deriving (Show)
 
index 820d859..0e5d21b 100644 (file)
@@ -1,6 +1,7 @@
 module Lseed.StipeInfo where
 
 import Lseed.Data
+import Lseed.Constants
 import Lseed.Data.Functions
 import Lseed.Geometry
 
@@ -8,8 +9,8 @@ annotateGarden :: Angle -> GrowingGarden -> AnnotatedGarden
 annotateGarden angle  = map (mapPlanted annotatePlant) . lightenGarden angle
 
 annotatePlant :: Plant (GrowthState, Double) -> AnnotatedPlant
-annotatePlant = go 0
-  where go d (Plant (gs, light) len ang ut ps) = Plant (StipeInfo
+annotatePlant = go 0 0 0
+  where go d o h (Plant (gs, light) len ang ut ps) = Plant (StipeInfo
                { siLength    = len
                , siSubLength = len + sum (map (siSubLength . pData) ps')
                , siLight     = light
@@ -17,8 +18,12 @@ annotatePlant = go 0
                , siAngle     = ang
                , siDirection = normAngle d'
                , siGrowth    = gs
+               , siOffset    = o'
+               , siHeight    = h'
                }) len ang ut ps'
-         where ps' = map (go d') ps
+         where ps' = map (go d' o' h') ps
                d' = (d+ang)
+               o' = o - len * stipeLength * sin d'
+               h' = h + len * stipeLength * cos d'
 
 normAngle a = a - fromIntegral (truncate ((a+pi) / (2*pi))) * 2*pi