X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FGrid.hs;h=6d360e2c103d61cc6b41a9cc3873f52db756e169;hb=6fb9ab6b6068870323e996da931fc04c7710e3e4;hp=e67ac764022a82ab974593395482ec4d6cfa81fc;hpb=f97dbb52b73bd90a89940b9653ff274654aba9de;p=spline3.git diff --git a/src/Grid.hs b/src/Grid.hs index e67ac76..6d360e2 100644 --- a/src/Grid.hs +++ b/src/Grid.hs @@ -1,13 +1,12 @@ -- | The Grid module just contains the Grid type and two constructors -- for it. We hide the main Grid constructor because we don't want -- to allow instantiation of a grid with h <= 0. -module Grid (empty_grid, - function_values, - Grid, - h, - make_grid) +module Grid where +import Cube (Cube(Cube)) +import FunctionValues + -- | Our problem is defined on a Grid. The grid size is given by the -- positive number h. The function values are the values of the -- function at the grid points, which are distance h from one @@ -28,3 +27,21 @@ make_grid grid_size values -- | Creates an empty grid with grid size 1. empty_grid :: Grid empty_grid = Grid 1 [[[]]] + + + +-- This is how we do a 'for' loop in Haskell. +-- No, seriously. +cubes :: Grid -> [[[Cube]]] +cubes g + | fvs == [[[]]] = [[[]]] + | head fvs == [[]] = [[[]]] + | otherwise = + [[[ Cube (h g) i j k (make_values fvs i j k) | i <- [0..xsize]] + | j <- [0..ysize]] + | k <- [0..zsize]] + where + fvs = function_values g + zsize = (length fvs) - 1 + ysize = (length $ head fvs) - 1 + xsize = (length $ head $ head fvs) - 1