Commit Graph

169 Commits

Author SHA1 Message Date
Sébastien Crozet 663f8b3ccb Add a `Diag` to build, get and set a matrix diagonal. 2014-08-16 13:22:53 +02:00
Sébastien Crozet 40c9915870 Add the types: DVec1, .., DVec6.
They are stack-allocated, dynamically sized vectors with a maximum size.
This is useful for slicing small matrices, without allocation.
2014-08-16 12:16:26 +02:00
Sébastien Crozet 7d6884c3df Add a `Det` trait to compute the determinant + implement it for `Mat{1,2,3}`. 2014-08-11 19:54:13 +02:00
Sébastien Crozet 2f0234e7ac Avoid modulo on `DMat::from_fn`. 2014-07-27 09:13:13 +02:00
Nathan Stien ebe1ed1f16 Fix coordinate calculation in DMat::from_fn().
The builder function `f` was receiving incorrect coordinates, often
involving a uint underflow.

Added a test case to verify the new behavior.
2014-07-26 19:03:37 -05:00
Sébastien Crozet e3d1bf6f92 Update to the last rust-nightly.
Version of rustc: 0.11.0-nightly (5ad7286dc37839b7234ff51aab172e48935869d8 2014-07-12 00:31:46 +0000)
2014-07-12 09:30:49 +02:00
Sébastien Crozet 7b9a3f2bb9 Update to the last rust-nightly.
Version of rustc: 0.11.0-nightly (459f155f81291c46633e86a480628b50304ffb1c 2014-07-04 23:46:44 +0000).
2014-07-05 10:33:57 +02:00
Sébastien Crozet efc2f46019 Update to the last rust-nightly.
Version of rustc: 0.11.0-pre-nightly (e55f64f 2014-06-09 01:11:58 -0700).
2014-06-09 21:03:36 +02:00
Sébastien Crozet 5066d6b9de Update to the last rust-nightly.
Version of rustc: 0.11.0-pre-nightly (918dbfe 2014-06-02 20:51:30 -0700).
2014-06-03 22:37:46 +02:00
Sébastien Crozet f6c597f102 Update to the last rust-nightly.
Version of rustc: 0.11.0-pre-nightly (faa7ba7 2014-05-31 01:06:40 -0700).

Main changes:
        * `cmp::Ord` -> `cmp::PartialOrd`
        * `cmp::Eq`  ->  `cmp::PartialEq`

Note that `na::PartialOrd` is not the same as `cmp::PartialOrd`
(which lacks a lot of partial ordering operators).
2014-06-01 15:22:11 +02:00
Leo Lahti f8ad8aa02b Fixed issue #13 2014-05-30 21:14:16 +00:00
Sébastien Crozet 40c5f5deb8 Rename matrix-scalar and vector-scalar operator-overloading-related traits to avoid name clashes. 2014-05-22 19:54:54 +02:00
Franklin Delehelle (Vampire.local) 6468360edb Compile with nightlies 2014-05-21 13:08:04 +02:00
Vincent Barrielle 987b91767a update to the latest rust: FloatMath for math functions (sin/exp/...)
Also removed a bunch of duplicate trait usages
2014-05-16 21:04:35 +02:00
Vincent Barrielle f8ac86effc update to latest rust 2014-05-13 08:29:56 +02:00
Vincent Barrielle a1fdec3b52 Merge remote-tracking branch 'origin/master' into genericQR 2014-05-13 08:27:52 +02:00
Vincent Barrielle 3dc0e27fd2 fix typo 2014-05-12 21:54:18 +02:00
Vincent Barrielle 76a8bc3cf1 QR factorization for fixed size matrices.
The ColSlice implementation for fixed size matrices returns a DVec,
while this is probably not optimal performance-wise, the dynamic nature
of the result makes this necessary. Using a data type presenting the
ImmutableVector trait would solve this, but it looks like a non-trivial
change.
2014-05-12 14:06:25 +02:00
Alexander Christiansson 5d8727a17d std::cast::transmute -> std::mem::transmute 2014-05-12 01:31:22 +02:00
Vincent Barrielle 6ad11edf9b more generic QR: generalize the impl of the Indexable trait
This allows the implementation of householder reflection without relying
on knowledge of DVec. This required a new member in the Indexable trait:
the shape() function, which returns the maximum index available.
2014-05-11 20:05:08 +02:00
Vincent Barrielle d1a58f960c Moving row/col slicing traits to a better place 2014-05-09 23:05:23 +02:00
Vincent Barrielle 5611307b4d QR decomposition depends less on DMat internals 2014-05-09 22:14:37 +02:00
Vincent Barrielle 2fd880a62d implemented QR factorization
this is a first sketch, the algorithm is not yet initialized and relies
on knowledge of DMat internals. A next step would be to implement this
algorithm in a more generic manner.
2014-05-09 18:59:26 +02:00
Sébastien Crozet 9badebf24c Give access to the traits required for generalized operator overloading.
Those are `Vec3MulRhs`-like traits that allow the simulation of haskellish fundeps to allow multiple
overloads of builtin operators (* / + -).
They are all on the `na::overload` module.
2014-05-08 23:21:36 +02:00
Sébastien Crozet 7ef933aefb Update to the last Rust.
Version of rustc: 0.11-pre (eea4909 2014-04-24 23:41:15 -0700)
Vector do not implement `Rand` anymore.
2014-04-25 20:28:29 +02:00
Sébastien Crozet 1eed234e08 Avoid name conflicts with the standard lib.
The `Vec` trait is renamed `AnyVec`.
The `Less`, `Greater`, `Equal` variants are renamed `PartialLess`, `PartialGreater`,
`PartialEqual`.

Those new names are not very good, so they might change in the future.
2014-04-13 10:37:39 +02:00
Sébastien Crozet 16aa5c8937 Make Iso* fields public again. 2014-04-03 20:52:52 +02:00
Sébastien Crozet 06e18d214a Update to the last Rust.
Version of rustc: 0.10-pre (b8ef9fd 2014-03-31 15:51:33 -0700)

struct fields are now public by default.
2014-04-01 23:00:59 +02:00
Sébastien Crozet 1edecbcee4 Automatically derive `TotalEq` whenever `Eq` is derived. 2014-03-28 21:40:30 +01:00
Sébastien Crozet 4435d2f7f4 Update to the last Rust.
Version of rustc: rustc 0.10-pre (b8601a3 2014-03-28 06:26:47 -0700)
2014-03-28 20:58:09 +01:00
Sébastien Crozet 1dade3bd24 Remove every `use std::vec::Vec`.
It is part of the Rust prelude now.
2014-03-22 08:14:15 +01:00
Sébastien Crozet 915d8c057e Update to the last Rust.
Version of rustc: 0.10-pre (7b957a8 2014-03-21 08:21:51 -0700)
2014-03-21 21:57:58 +01:00
Sébastien Crozet 606ad947c9 Use Vec instead of ~[].
Version of rustc: 0.10-pre (fc7a112 2014-03-14 23:11:31 -0700)
2014-03-15 12:23:54 +01:00
Peter Nguyen fc10742b5c Change std::rand to rand in lower_triangular.rs 2014-03-13 19:35:01 -04:00
Peter Nguyen 7bc561c835 Update to latest rust.
`std::rand` was moved to it's own crate.
Version of rustc: rustc 0.10-pre (4d64441 2014-03-12 15:07:06 -0700)
2014-03-13 17:47:03 -04:00
Sébastien Crozet 13430866d4 Remove the DeepClone derivings.
Version of rustc: 0.10-pre (e959c87 2014-03-08 22:41:45 -0800)
2014-03-09 10:09:08 +01:00
Sébastien Crozet 57dfc14139 Update to the last Rust.
Version of rustc: 0.10-pre (4243cad 2014-02-24 22:17:02 -0800)
2014-02-25 09:41:41 +01:00
Sébastien Crozet c834439009 Update to the last rust.
Version of rustc: 0.10-pre (a5342d5 2014-02-23 22:06:50 -0800)
2014-02-24 11:48:02 +01:00
Sébastien Crozet ba32051fdf Add deriving `Hash` and `Show`. 2014-02-23 08:44:21 +01:00
Sébastien Crozet 9fb67f8125 Add more comparison default methods to the `PartialOrd` trait.
This allows for some optimization.
2014-02-18 12:48:52 +01:00
Sébastien Crozet becb77843e Update to the last Rust.
Version of rustc: 0.10-pre (b0ce960 2014-02-17 22:16:51 -0800)
This replaces uses of the `Orderable` trait by a `PartialOrd` trait: the `min` and `max` methods
are replaced by `inf` and `sup` methods.
Vectors do not implement the `Ord` trait any more.

Fix #4
2014-02-18 12:13:40 +01:00
Eduard Bopp 513fb33e4a Fix call to swap function due to upstream changes
Rust moved this function from std::util (which has been dissolved now) to std::mem.
2014-02-11 20:34:28 +01:00
Sébastien Crozet 85c67b5544 Activate the unused_results lint. 2014-01-31 15:26:25 +01:00
Sébastien Crozet 4c262bb91d Remove useless parenthesis. 2014-01-23 01:22:23 +01:00
Sébastien Crozet 8de8c94b45 Update to the last Rust.
Version of rustc: 0.10-pre (d4640f9 2014-01-20 11:41:29 -0800)

This also removes the `PVec` type due to lack of use-case.
2014-01-20 23:41:22 +01:00
Sébastien Crozet 79008262cb Doc: fix some typos. 2014-01-19 15:49:32 +01:00
Sébastien Crozet 197f7ff4d2 Update to the last Rust
Version of rustc: 0.10-pre (1da2962 2014-01-17 23:41:45 -0800)
Iterators were renamed.
2014-01-18 10:49:47 +01:00
Sébastien Crozet 87c0d5b769 Make the `struct` and `traits` modules private.
Now that the documentation of public export of private modules is inlined on the exporter's
documentation, there is non need to export anything but the `na` module.
2014-01-14 09:40:12 +01:00
Sébastien Crozet f5b0b76d8d Add the ApproxEq trait.
It is no longer part of std::num
2014-01-09 20:48:30 +01:00
Sébastien Crozet 31904cad6f Add a `perspective3d` free function on the na:: module. 2014-01-01 14:44:51 +01:00
Jan Niklas Hasse 396d394ab9 Use new std::vec functions 2013-12-16 12:04:02 +01:00
Sébastien Crozet f83ddde824 Update to the last Rust.
This renames lib.rs to nalgebra.rs so that the generated *.so has the right name.
2013-12-11 16:32:03 +01:00
Sébastien Crozet 1e71dc1d0a Add unchecked access to vector components on the Indexable trait. 2013-12-01 20:17:18 +01:00
Sébastien Crozet 15d12e5322 Implement AbsoluteRotate for Identity. 2013-11-28 20:14:25 +01:00
Sébastien Crozet 930ff81f3b Implement AbsoluteRotate for Identity. 2013-11-28 20:11:10 +01:00
Sébastien Crozet b244975f93 Update to the last Rust. 2013-11-27 11:24:29 +01:00
Sébastien Crozet 9e7a623d99 Start implementation of quaternions. 2013-11-25 15:31:46 +01:00
Sébastien Crozet 4addd531cf Add incomplete implementation of 4D rotation. 2013-11-22 09:46:48 +01:00
Sébastien Crozet 8423286911 Switch to column-major representation.
Matrices are now column-major.
This will be useful to interop with opengl and lapack.
2013-10-17 22:40:44 +02:00
Sébastien Crozet 90e40aaec0 Make most out-of-place methods static.
This is to make people prefer the functional style.
Things like `a.dot(b)` dont make sense per se (there is no reason for `a` to have a different
status than `b`). Using static methods avoid this.

In-place methods are left unchanged.
2013-10-16 21:44:33 +02:00
Sébastien Crozet dcd1e7719b Add methods to access a DVec<N> as a &[N]. 2013-10-14 15:38:23 +02:00
Sébastien Crozet bb5654d220 Remove free-functions alliasing structures constructors.
Those constructors are not idiomatic. Use e.g. `Vec3::new(0, 0, 0)` instead.
2013-10-14 11:22:38 +02:00
Sébastien Crozet ccbc8b4429 Api change: deal with inplace/out of place methods.
Before, it was too easy to use an out of place method instead of the inplace one since they name
were pretty mutch the same. This kind of confusion may lead to silly bugs very hard to understand.
Thus the following changes have been made when a method is available both inplace and out-of-place:

* inplace version keep a short name.
* out-of-place version are suffixed by `_cpy` (meaning `copy`), and are static methods.

Methods applying transformations (rotation, translation or general transform) are now prefixed by
`append`, and a `prepend` version is available too.

Also, free functions doing in-place modifications dont really make sense. They have been removed.

Here are the naming changes:
* `invert` -> `inv`
* `inverted` -> `Inv::inv_cpy`
* `transpose` -> `transpose`
* `transposed` -> `Transpose::transpose_cpy`
* `transform_by` -> `append_transformation`
* `transformed` -> `Transform::append_transformation_cpy`
* `rotate_by` -> `apppend_rotation`
* `rotated` -> `Rotation::append_rotation_cpy`
* `translate_by` -> `apppend_translation`
* `translate` -> `Translation::append_translation_cpy`
* `normalized` -> `Norm::normalize_cpy`
* `rotated_wrt_point` -> `RotationWithTranslation::append_rotation_wrt_point_cpy`
* `rotated_wrt_center` -> `RotationWithTranslation::append_rotation_wrt_center_cpy`

Note that using those static methods is very verbose, and using in-place methods require an
explicit import of the related trait.

This is a way to convince the user to use free functions most of the time.
2013-10-14 10:42:07 +02:00
Sébastien Crozet c352452bcb Remove unused import. 2013-10-10 00:26:07 +02:00
Sébastien Crozet 7667d8f19a Add a double-trait-dispatch-trick based cast trait
The Cast trait replaces both MatCast and VecCast.
2013-10-09 23:10:43 +02:00
Sébastien Crozet 2a4807262a Re-export the Identity type properly. 2013-10-08 21:00:45 +02:00
Sébastien Crozet 63e6474d40 Re-add look_at methods for isometries. 2013-10-08 21:00:25 +02:00
Sébastien Crozet edf17b5667 Update to the last Rust.
Also use free-functions on tests.
2013-10-08 01:22:56 +02:00
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