toFloretFace :: RealFloat a => [Point3f a] -> [[Point3f a]]
toFloretFace [p0, p1, p2] = assert (n1 == n2 && n2 == n0)
                                   [ [p0, p3, p9, p5, p8]
                                   , [p1, p4, p9, p3, p6]
                                   , [p2, p5, p9, p4, p7]
                                   ]
  where n0 = norm p0
        n1 = norm p1
        n2 = norm p2
        push = if floretPushing
          then forceNorm n0
          else id
        p9 = push $ (1/3) `times` (p0 `add` p1 `add` p2)
        transform = times magicScale . (magicRotate $ normalized p9)
        p3 = push $ p0 `add` (transform $ vec p0 p1)
        p4 = push $ p1 `add` (transform $ vec p1 p2)
        p5 = push $ p2 `add` (transform $ vec p2 p0)
        p6 = push $ p1 `add` (transform $ vec p1 p0)
        p7 = push $ p2 `add` (transform $ vec p2 p1)
        p8 = push $ p0 `add` (transform $ vec p0 p2)
toFloretFace :: RealFloat a => [Point3f a] -> [[Point3f a]]
toFloretFace [p0, p1, p2] = assert (n1 == n2 && n2 == n0)
                                   [ [p0, p3, p9, p5, p8]
                                   , [p1, p4, p9, p3, p6]
                                   , [p2, p5, p9, p4, p7]
                                   ]
  where n0 = norm p0
        n1 = norm p1
        n2 = norm p2
        push = if floretPushing
          then forceNorm n0
          else id
        p9 = push $ (1/3) `times` (p0 `add` p1 `add` p2)
        transform = times magicScale . (magicRotate $ normalized p9)
        p3 = push $ p0 `add` (transform $ vec p0 p1)
        p4 = push $ p1 `add` (transform $ vec p1 p2)
        p5 = push $ p2 `add` (transform $ vec p2 p0)
        p6 = push $ p1 `add` (transform $ vec p1 p0)
        p7 = push $ p2 `add` (transform $ vec p2 p1)
        p8 = push $ p0 `add` (transform $ vec p0 p2)
toFloretFace [p0, p1, p2] = assert (n1 == n2 && n2 == n0)
                                   [ [p0, p3, p9, p5, p8]
                                   , [p1, p4, p9, p3, p6]
                                   , [p2, p5, p9, p4, p7]
                                   ]
  where n0 = norm p0
        n1 = norm p1
        n2 = norm p2
        push = if floretPushing
          then forceNorm n0
          else id
        p9 = push $ (1/3) `times` (p0 `add` p1 `add` p2)
        transform = times magicScale . (magicRotate $ normalized p9)
        p3 = push $ p0 `add` (transform $ vec p0 p1)
        p4 = push $ p1 `add` (transform $ vec p1 p2)
        p5 = push $ p2 `add` (transform $ vec p2 p0)
        p6 = push $ p1 `add` (transform $ vec p1 p0)
        p7 = push $ p2 `add` (transform $ vec p2 p1)
        p8 = push $ p0 `add` (transform $ vec p0 p2)