GlomeVec 0.1.2 → 0.2
raw patch · 2 files changed
+50/−16 lines, 2 filesdep ~base
Dependency ranges changed: base
Files
- Data/Glome/Vec.hs +42/−12
- GlomeVec.cabal +8/−4
Data/Glome/Vec.hs view
@@ -108,6 +108,10 @@ data Ray = Ray {origin, dir :: !Vec} deriving Show --data Plane = Plane {norm :: !Vec, offset :: !Flt} deriving Show +ray_ub :: Ray -> (# Flt, Flt, Flt, Flt, Flt, Flt #)+ray_ub (Ray (Vec !ox !oy !oz) (Vec !dx !dy !dz)) = (# ox, oy, oz, dx, dy, dz #)++ -- | Vec constructor. vec :: Flt -> Flt -> Flt -> Vec vec !x !y !z = (Vec x y z)@@ -717,22 +721,48 @@ -- we hit. Otherwise, we miss. (It's up to the -- caller to figure that out.) +{- bbclip :: Ray -> Bbox -> Interval bbclip (Ray (Vec ox oy oz) (Vec dx dy dz)) (Bbox (Vec p1x p1y p1z) (Vec p2x p2y p2z)) =- let dxrcp = 1/dx- dyrcp = 1/dy- dzrcp = 1/dz- Interval inx outx = if dx > 0 - then Interval ((p1x-ox)*dxrcp) ((p2x-ox)*dxrcp)- else Interval ((p2x-ox)*dxrcp) ((p1x-ox)*dxrcp)- Interval iny outy = if dy > 0- then Interval ((p1y-oy)*dyrcp) ((p2y-oy)*dyrcp)- else Interval ((p2y-oy)*dyrcp) ((p1y-oy)*dyrcp)- Interval inz outz = if dz > 0- then Interval ((p1z-oz)*dzrcp) ((p2z-oz)*dzrcp)- else Interval ((p2z-oz)*dzrcp) ((p1z-oz)*dzrcp)+ let !dxrcp = 1/dx+ !dyrcp = 1/dy+ !dzrcp = 1/dz+ Interval !inx !outx = if dx > 0 + then Interval ((p1x-ox)*dxrcp) ((p2x-ox)*dxrcp)+ else Interval ((p2x-ox)*dxrcp) ((p1x-ox)*dxrcp)+ Interval !iny !outy = if dy > 0+ then Interval ((p1y-oy)*dyrcp) ((p2y-oy)*dyrcp)+ else Interval ((p2y-oy)*dyrcp) ((p1y-oy)*dyrcp)+ Interval !inz !outz = if dz > 0+ then Interval ((p1z-oz)*dzrcp) ((p2z-oz)*dzrcp)+ else Interval ((p2z-oz)*dzrcp) ((p1z-oz)*dzrcp) in Interval (fmax3 inx iny inz) (fmin3 outx outy outz)+-} +bbclip_ub :: Ray -> Bbox -> (# Flt, Flt #)+bbclip_ub (Ray (Vec !ox !oy !oz) (Vec !dx !dy !dz)) + (Bbox (Vec !p1x !p1y !p1z) (Vec !p2x !p2y !p2z)) =+ let !dxrcp = 1/dx+ !dyrcp = 1/dy+ !dzrcp = 1/dz+ (# !inx, !outx #) =+ if dx > 0 + then (# (p1x-ox)*dxrcp, (p2x-ox)*dxrcp #)+ else (# (p2x-ox)*dxrcp, (p1x-ox)*dxrcp #)+ (# !iny, !outy #) =+ if dy > 0+ then (# (p1y-oy)*dyrcp, (p2y-oy)*dyrcp #)+ else (# (p2y-oy)*dyrcp, (p1y-oy)*dyrcp #)+ (# !inz, !outz #) =+ if dz > 0+ then (# (p1z-oz)*dzrcp, (p2z-oz)*dzrcp #)+ else (# (p2z-oz)*dzrcp, (p1z-oz)*dzrcp #)+ in+ (# fmax3 inx iny inz, fmin3 outx outy outz #) +bbclip :: Ray -> Bbox -> Interval+bbclip ray bbox =+ let (# near, far #) = bbclip_ub ray bbox+ in Interval near far
GlomeVec.cabal view
@@ -1,20 +1,24 @@ Name: GlomeVec-Version: 0.1.2+Version: 0.2 Synopsis: Simple 3D vector library Description: A simple library for dealing with 3D vectors, suitable for graphics projects. A small texture library with Perlin noise is included as well. License: GPL License-file: LICENSE Author: Jim Snow Maintainer: Jim Snow <jsnow@cs.pdx.edu>-Copyright: Copyright 2008,2009 Jim Snow+Copyright: Copyright 2008,2009,2014 Jim Snow Homepage: http://www.haskell.org/haskellwiki/Glome Stability: experimental Category: graphics build-type: Simple-Cabal-Version: >= 1.2+Cabal-Version: >= 1.2.3 extra-source-files: README.txt library+ ghc-options: -fllvm -O2 -funbox-strict-fields+ extensions: UnboxedTuples+ ghc-prof-options: -prof -auto-all+ exposed-modules: Data.Glome.Vec Data.Glome.Texture- Build-Depends: base >= 3 && < 4, array+ Build-Depends: base >= 4 && < 5, array