packages feed

qhull-0.1.0.1: src/ConvexHull/SnubDodecahedron/SnubDodecahedron.hs

module ConvexHull.SnubDodecahedron.SnubDodecahedron where
import           Data.List                  hiding (permutations)
import           Math.Combinat.Permutations

signsAll2 :: (Eq a, Num a) => [[a]] -> [[a]]
signsAll2 = concatMap signs
  where
    signs :: (Eq a, Num a) => [a] -> [[a]]
    signs [x,y,z] = nub [[x,y,-z], [x,-y,z], [-x,y,z], [-x,-y,-z]]


vertices :: ([Double], Bool) -> [[Double]]
vertices (coords, allperms) =
  -- map (map (/ sqrt 128.9619)) $
  signsAll2 $
  nub $ zipWith permuteList perms (replicate 12 coords)
  where perms = filter (if allperms then const True else isEvenPermutation) (permutations 3)

snubDodecahedron :: [[Double]]
snubDodecahedron = concatMap vertices
  [ ([2*alpha, 2, 2*beta], False)
   , ([alpha + beta/phi + phi, -alpha*phi + beta + 1/phi, alpha/phi + beta*phi-1], False)
   , ([alpha + beta/phi - phi, alpha*phi - beta + 1/phi, alpha/phi + beta*phi+1], False)
   , ([-alpha/phi + beta*phi+1, -alpha + beta/phi - phi, alpha*phi + beta - 1/phi], False)
   , ([-alpha/phi + beta*phi-1, alpha - beta/phi - phi, alpha*phi + beta + 1/phi], False) ]
  where
    alpha = xi - 1/xi
    beta = xi*phi + phi*phi + phi/xi
    xi = 1.7155615
    phi = (1 + sqrt 5)/2