Linear algebra library for Rust.
Go to file
Sébastien Crozet 84212f1449 Huge api change!
Everything changed, hopefully for the best.

* everything is accessible from the `na` module. It re-export
  everything and provides free functions (i-e: na::dot(a, b) instead of
  a.dot(b)) for most functionalities.
* matrix/vector adaptors (Rotmat, Transform) are replaced by plain
  types: Rot{2, 3, 4} for rotation matrices and Iso{2, 3, 4} for
  isometries (rotation + translation).  This old adaptors system was to
  hard to understand and to document.
* each file related to data structures moved to the `structs` folder.
  This makes the doc a lot more readable and make people prefer the
  `na` module instead of individual small modules.
* Because `na` exists now, the modules `structs::vec` and
  `structs::mat` dont re-export anything now.

As a side effect, this makes the documentation more readable.
2013-10-06 18:07:17 +02:00
src Huge api change! 2013-10-06 18:07:17 +02:00
.gitignore Add the doc folder to the .gitignore. 2013-09-22 11:09:32 +02:00
LICENSE Initial commit. 2013-05-14 11:34:28 +00:00
Makefile Update the doc rule. 2013-10-02 18:20:53 +02:00
README.md Huge api change! 2013-10-06 18:07:17 +02:00

nalgebra

nalgebra is a linear algebra library written for Rust targeting:

  • general-purpose linear algebra (still misses a lot of features…).
  • real time computer graphics.
  • real time computer physics.

Using nalgebra

All the functionalities of nalgebra are grouped in one place: the na module. This module re-exports everything and includes free functions for all traits methods. Free functions are useful if you prefer doing something like: na::dot(v1, v2) instead of v1.dot(v2).

  • You can import the whole prelude, including free functions, using:
pub use nalgebra::na::*;
  • If you dont want to import everything but only every trait:
pub use nalgebra::traits::*;
  • If you dont want to import everything but only every structure:
pub use nalgebra::structs::*;

Of course, you can still import nalgebra::na alone, and get anything you want using the na prefix.

Features

nalgebra is meant to be a general-purpose linear algebra library (but is very far from that…), and keeps an optimized set of tools for computational graphics and physics. Those features include:

  • Vectors with static sizes: Vec0, Vec1, Vec2, ..., Vec6.
  • Square matrices with static sizes: Mat1, Mat2, ..., Mat6 .
  • Rotation matrices: Rot2, Rot3, Rot4.
  • Isometries: Iso2, Iso3, Iso4.
  • Dynamically sized vector: DVec.
  • Dynamically sized (square or rectangular) matrix: DMat.
  • A few methods for data analysis: Cov, Mean.
  • Operator overloading using the double trait dispatch trick. For example, the following work:
extern mod nalgebra;
use nalgebra::na::{Vec3, Mat3};

fn main() {
    let vVec3<f64> = Zero::zero();
    let mMat3<f64> = One::one();

    let _ = m * v;   // matrix-vector multiplication.
    let _ = v * m;   // vector-matrix multiplication.
    let _ = m * m;   // matrix-matrix multiplication.
    let _ = v * 2.0; // vector-scalar multiplication.
}
  • Almost one trait per functionality: useful for generic programming.

Compilation

You will need the last rust compiler from the master branch. If you encounter problems, make sure you have the last version before creating an issue.

git clone git://github.com/sebcrozet/nalgebra.git
cd nalgebra
make

You can build the documentation on the doc folder using:

make doc