# simple-vec3: Three-dimensional vectors of doubles with basic operations

[ bsd3, library, math, numerical ] [ Propose Tags ]

Simple three-dimensional vectors of doubles with basic vector and matrix operations, supporting Data.Vector.Unboxed and Data.Vector.Storable.

Versions [faq] 0.1.0.0, 0.1.0.1, 0.2, 0.3, 0.3.1, 0.4, 0.4.0.1, 0.4.0.2, 0.4.0.3, 0.4.0.4, 0.4.0.5, 0.4.0.6, 0.4.0.7, 0.4.0.8, 0.4.0.9, 0.4.0.10 CHANGELOG.md base (<5), QuickCheck (<2.13), vector (<0.13) [details] BSD-3-Clause Dmitry Dzhus dima@dzhus.org Math, Numerical https://github.com/dzhus/simple-vec3#readme https://github.com/dzhus/simple-vec3/issues head: git clone https://github.com/dzhus/simple-vec3 by DmitryDzhus at Mon Oct 29 14:44:26 UTC 2018 LTSHaskell:0.4.0.10, NixOS:0.4.0.10, Stackage:0.4.0.10 2270 total (243 in the last 30 days) (no votes yet) [estimated by rule of succession] λ λ λ Docs available Last success reported on 2018-10-29

## Modules

[Index] [Quick Jump]

#### Maintainer's Corner

For package maintainers and hackage trustees

[back to package description]

# simple-vec3

Simple three-dimensional vectors of doubles with basic vector and matrix operations, supporting Data.Vector.Unboxed and Data.Vector.Storable.

>>> let v1 = (-1, 0.0,  0.2) :: TVec3
>>> let v2 = ( 1, 2.3,  5.0) :: TVec3
>>> let v3 = ( 1,   1, -0.2) :: TVec3

>>> v1 <+> v2
(0.0, 2.3, 5.2)

-- Dot product:
>>> v1 .* v2
0.0

-- Multiply by a scalar:
>>> v1 .^ 5
(-5.0, 0.0, 1.0)

-- Cross product:
>>> v1 >< v3
(-0.2, 0.0, -1.0)

-- Matrix-vector product:
>>> diag 2 mxv v2
(2.0, 4.6, 10.0)


Please consult the Hackage page for simple-vec3 for full documentation.

The package provides two different implementations for Vec3 type class, which differ in storage scheme. Benchmarks are included for both. You most likely want to use CVec3 which is based on contiguous storage scheme and offers the best performance.

## Alternatives

This package was written to explore and benchmark different array storage schemes in Haskell, as supported by vector library. Several alternatives with more extensive APIs exist: