Implement various matchable features
[L-seed.git] / src / Lseed / StipeInfo.hs
1 module Lseed.StipeInfo where
2
3 import Lseed.Data
4 import Lseed.Data.Functions
5 import Lseed.Geometry
6
7 annotatePlant :: Plant Double -> AnnotatedPlant
8 annotatePlant = go 0 0
9   where go a d (Stipe light len ps) = Stipe (StipeInfo
10                 { siLength    = len
11                 , siSubLength = len + sum (map (siSubLength . extractOutmost . snd) ps')
12                 , siLight     = light
13                 , siSubLight  = light + sum (map (siSubLight . extractOutmost . snd) ps')
14                 , siAngle     = a
15                 , siDirection = normAngle d
16                 }) len ps'
17           where ps' = map (\(a',p) -> (a', go a' (d+a') p)) ps
18
19 normAngle a = a - fromIntegral (truncate ((a+pi) / (2*pi))) * 2*pi