Big refactor: Move angle into Plant constructor
[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
9   where go d (Plant light len ang ps) = Plant (StipeInfo
10                 { siLength    = len
11                 , siSubLength = len + sum (map (siSubLength . pData) ps')
12                 , siLight     = light
13                 , siSubLight  = light + sum (map (siSubLight . pData) ps')
14                 , siAngle     = ang
15                 , siDirection = normAngle d'
16                 }) len ang ps'
17           where ps' = map (go d') ps
18                 d' = (d+ang)
19
20 normAngle a = a - fromIntegral (truncate ((a+pi) / (2*pi))) * 2*pi