diff options
Diffstat (limited to 'Spear/Math/Sphere.hs')
| -rw-r--r-- | Spear/Math/Sphere.hs | 35 |
1 files changed, 0 insertions, 35 deletions
diff --git a/Spear/Math/Sphere.hs b/Spear/Math/Sphere.hs deleted file mode 100644 index 4a9e3fc..0000000 --- a/Spear/Math/Sphere.hs +++ /dev/null | |||
| @@ -1,35 +0,0 @@ | |||
| 1 | module Spear.Math.Sphere | ||
| 2 | ( | ||
| 3 | Sphere(..) | ||
| 4 | , sphere | ||
| 5 | , spherept | ||
| 6 | ) | ||
| 7 | where | ||
| 8 | |||
| 9 | |||
| 10 | import Spear.Math.Vector3 as Vector | ||
| 11 | |||
| 12 | |||
| 13 | -- | A bounding volume. | ||
| 14 | data Sphere = Sphere | ||
| 15 | { center :: {-# UNPACK #-} !Vector3 | ||
| 16 | , radius :: {-# UNPACK #-} !Float | ||
| 17 | } | ||
| 18 | |||
| 19 | |||
| 20 | -- | Create a 'Sphere' from the given points. | ||
| 21 | sphere :: [Vector3] -> Sphere | ||
| 22 | |||
| 23 | sphere [] = error "Attempting to build a BoundingVolume from an empty list!" | ||
| 24 | |||
| 25 | sphere (x:xs) = Sphere c r | ||
| 26 | where | ||
| 27 | c = min + (max-min)/2 | ||
| 28 | r = norm $ max - c | ||
| 29 | (min,max) = foldr update (x,x) xs | ||
| 30 | update p (min,max) = (Vector.min p min, Vector.max p max) | ||
| 31 | |||
| 32 | |||
| 33 | -- | Return 'True' if the given 'Sphere' contains the given point, 'False' otherwise. | ||
| 34 | spherept :: Sphere -> Vector3 -> Bool | ||
| 35 | (Sphere center radius) `spherept` p = radius*radius >= normSq (p - center) | ||
