-- expand and rotate each face of the dodecahedron
snubDodecahedronPoints :: RealFloat a => [Point3f a]
snubDodecahedronPoints = foldr (++) [] $ map asList dodecahedronFaces
  where asList is = expandFace $ map (\i -> dodecahedronPoints !! i) is
        expandFace ps = map ((rotateFace ps ). (add $ times magicSnubTranslation $ faceNorm ps)) ps
        rotateFace ps = rotate magicSnubRotation $ faceNorm ps
        faceNorm ps = normalized $ foldr add (Point3f 0 0 0) ps


-- re use rhombicosidodecahedronFaces as much as possible, just split the quads intro triangles
snubDodecahedronPoints :: RealFloat a => [Point3f a]
snubDodecahedronPoints = foldr (++) [] $ map asList dodecahedronFaces
  where asList is = expandFace $ map (\i -> dodecahedronPoints !! i) is
        expandFace ps = map ((rotateFace ps ). (add $ times magicSnubTranslation $ faceNorm ps)) ps
        rotateFace ps = rotate magicSnubRotation $ faceNorm ps
        faceNorm ps = normalized $ foldr add (Point3f 0 0 0) ps


-- re use rhombicosidodecahedronFaces as much as possible, just split the quads intro triangles
snubDodecahedronPoints = foldr (++) [] $ map asList dodecahedronFaces
  where asList is = expandFace $ map (\i -> dodecahedronPoints !! i) is
        expandFace ps = map ((rotateFace ps ). (add $ times magicSnubTranslation $ faceNorm ps)) ps
        rotateFace ps = rotate magicSnubRotation $ faceNorm ps
        faceNorm ps = normalized $ foldr add (Point3f 0 0 0) ps


-- re use rhombicosidodecahedronFaces as much as possible, just split the quads intro triangles