Commit Graph

619 Commits

Author SHA1 Message Date
Daniel
dc571838bb Added check for symmetricity of input matrix 2015-08-07 15:03:38 +02:00
Daniel
b197959e2b Implemented Cholesky decomposition with tests 2015-08-07 14:44:25 +02:00
Arttu Ylä-Outinen
75208896a3 Fix multiplication of non-square DMats.
Matrices were in wrong order.
2015-07-12 10:25:43 +03:00
Sébastien Crozet
c13b0388ef Remove implementations of Rotation, Translation and Transformation for the Identity type.
Because most of their methods did not make sence for the (constant) identity matrix, they were set
to `panic!` at runtime whenever the user tried to use them. Instead, it is much safer to completely
forbid their use by removing the related trait implementation.

See sebcrozet/ncollide#87.
2015-07-07 22:40:14 +02:00
mitchmindtree
2efb30876e Added missing ops implementations for DMat 2015-06-21 01:08:23 +10:00
mitchmindtree
51381ff84d Allow for non-consuming std operations on DMat. Added DMat multiplication test. 2015-06-21 00:20:39 +10:00
Sébastien Crozet
44df67bde2 Fix the README examples. 2015-06-06 14:28:34 +02:00
Sébastien Crozet
410c3c9566 Add pointwise addition and subtraction for DMat.
Fix #132.
2015-06-06 12:59:47 +02:00
Sébastien Crozet
ea86890647 Add the RotationTo trait to compute the delta rotation between two elements.
Use `::angle_between` or `.angle_to`  to compute the rotation angle between two vectors/rotation
matrices/unit quaternions.
Use `::rotation_between` or `.rotation_to` to compute the rotation matrix/unit quaternion to
transform a vector/rotation matrix/uniq quaternion to another.

Fix #130.
2015-06-01 22:39:27 +02:00
Sébastien Crozet
ca87f9eb95 Rollup of minor beaking changes.
Use associated types for the `Outer` trait.
Add a `Repeat` trait for constructing a multidimensional value by repeating an element.
Split the `Diag` trait into `Diag` and `DiagMut`.
Implement `RustEncodable` for `Identity`.
2015-05-25 14:47:14 +02:00
Tinco Andringa
b26a994659 This reference should not be mut 2015-05-09 16:23:53 +02:00
Sébastien Crozet
5f7b480827 Merge pull request #125 from tinco/add_neg_to_base_float
Add neg trait to BaseFloat
2015-05-08 23:55:00 +02:00
Tinco Andringa
83917cb4a4 Qualify the output of FloatVec Neg 2015-05-08 21:44:03 +02:00
Tinco Andringa
f0ce528903 Add neg trait to BaseFloat 2015-05-08 21:03:13 +02:00
Eduard Bopp
730dc40b01 Remove operator hacks
The LMul, RMul and Scalar* traits were only necessary due to language
limitations regarding trait bounds that are now gone. The Mat trait is now
expressed in terms of regular operator traits.

However, due to the removal of these traits this constitutes a breaking change.
2015-05-06 13:23:14 +02:00
arturo castro
24fa9c7826 fixes for latest rust 2015-04-23 20:26:16 +02:00
Sébastien Crozet
36223991c1 Remove all deprecated functions/traits. 2015-04-18 14:58:38 +02:00
Sébastien Crozet
313ca1b8ae Use the Zero and One traits from the num crate.
Remove our own definitions of those traits.
Also fixes test-related attributes to make them compile again.
2015-04-18 14:38:34 +02:00
Eduard Bopp
e453bfed47 Use Float trait from num crate 2015-04-04 17:53:25 +02:00
Eduard Bopp
9d428be8b4 Rename frac_2_sqrtpi -> frac_2_sqrt_pi 2015-04-04 17:05:30 +02:00
Anders Kaseorg
e3962e8775 FRAC_2_SQRTPI was renamed to FRAC_2_SQRT_PI
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-04-04 16:58:11 +02:00
Eduard Bopp
49abb42980 Merge pull request #114 from andersk/neg
Remove Neg from BaseNum
2015-04-04 16:44:29 +02:00
Anders Kaseorg
d47cdb5594 Remove Neg from BaseNum
As per https://github.com/rust-lang/rust/pull/23945, Neg is no longer
implemented for unsigned types.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-04-03 18:59:18 -04:00
Anders Kaseorg
005aebc498 Remove #![feature(core)]
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-04-02 04:53:55 -04:00
Anders Kaseorg
165e095a57 Remove use of num::cast
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-04-02 04:53:55 -04:00
Anders Kaseorg
c1cbf7465d Remove use of PI_2
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-04-02 04:10:36 -04:00
Anders Kaseorg
1cb3314064 Add type annotation required by rustc 2015-03-31
Resolves this error, which is fallout from
https://github.com/rust-lang/rust/pull/23673:

src/structs/dmat.rs:501:43: 501:74 error: type annotations required: cannot resolve `<f64 as core::ops::Div<_>>::Output == f64` [E0284]
src/structs/dmat.rs:501         let normalizer: N    = Cast::from(1.0f64 / Cast::from(self.nrows));
                                                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2015-03-31 17:49:09 -04:00
Eduard Bopp
ef4a52d53b Remove unused feature unboxed_closures 2015-03-29 13:45:33 +02:00
Eduard Bopp
de2351a441 Only use test feature in test configuration 2015-03-29 13:45:33 +02:00
Eduard Bopp
70b4def5cc Stop using unstable std_misc feature
It was only used for `Float::{max_value, min_value}` in non-necessary places,
so for now this helps stabilization for Rust 1.0.
2015-03-29 13:45:33 +02:00
Eduard Bopp
df93ed2d1c Replace quoted crate declarations 2015-03-29 13:00:09 +02:00
Eduard Bopp
ec5ece46ca Use slicing syntax instead of deprecated methods 2015-03-29 12:57:16 +02:00
Sébastien Crozet
0988b837dc Update to the last rust-nighly.
Version of rustc: rustc 1.0.0-nightly (123a754cb 2015-03-24).
2015-03-25 22:39:06 +01:00
Pierre Krieger
7c415692c3 Update for rustc 2015-03-23 14:38:48 +01:00
Jameson Ernst
9b8076e179 Add #[repr(C)] to structs likely to be used in ffi 2015-03-01 12:50:17 -08:00
Jameson Ernst
caca330995 Fix deprecated closure syntax 2015-03-01 12:41:13 -08:00
Jameson Ernst
b805f9d829 Fix macros for nightly 2015-03-01 12:34:42 -08:00
Eduard Bopp
bd593a923c Fix a number of warnings
Mostly related to the `us` → `usize` suffix renaming. It turns out that none of
the suffixes are required any more, as the type inference appears to have
improved in that regard. There were also parantheses around range terms that
are not required any more.

Finally the `[]` syntax has been deprecated and thereby removed.
2015-02-21 15:07:50 +01:00
Ben Foppa
8d28d7dbd6 FromIterator changes and phantom type annotations. 2015-02-20 18:02:27 -05:00
Eduard Bopp
b2a4918376 Fix bug in UnitQuat construction from Quat 2015-02-17 13:54:56 +01:00
Eduard Bopp
d368270ebc Fix iterator mutability
For loops now consume iterators.
2015-02-17 13:45:25 +01:00
Eduard Bopp
f14f240aa7 Migrate random generation to use crates.io rand
The standard library random generation facilities have been deprecated in
favour of a new crate on crates.io.
2015-02-17 13:45:16 +01:00
Peter Atashian
6b71de4665 Update rust
Signed-off-by: Peter Atashian <retep998@gmail.com>
2015-02-08 02:28:57 -05:00
Sébastien Crozet
316298f825 Merge pull request #87 from aepsil0n/workaround-ice
Workaround internal compiler error.
2015-02-04 22:21:51 +01:00
Eduard Bopp
27bfe381d9 Workaround internal compiler error
The associated type bound here was not parsed correctly. This is likely due to
the ICE described in rust-lang/rust#20413.
2015-02-03 19:18:58 +01:00
Eduard Bopp
3107dd607b Rename similar in-place and copy methods
Fixes #52.

This renames pairs of methods like `normalize_cpy`, `normalize` to `normalize`
and `normalize_mut`. Note that the previous in-place operations had the same
name that now belongs to the copy operations. Therefore this is a breaking
change.

On a similar note, the `Quat::conjugate` method was also renamed to
`conjugate_mut` and a new copying method has taken its place. This appears to
be a similar issue (apart from the lack of the copy operation) and thus was
dealt with here, too.
2015-02-01 23:23:57 +01:00
Sébastien Crozet
39fd7c1ae7 Silence warnings and replace Show by Debug. 2015-02-01 16:15:55 +01:00
Eduard Bopp
5ca3e41375 Implement AssertEq for reference types
Just as the standard library's PartialEq is implemented for reference types,
the ApproxEq trait should be implemented on them as well. This is mostly an
ergonomic improvement for certain testing situations, where a method yields a
reference. For non-copy types it allows using the assert_approx_… macros, which
would otherwise not be possible.
2015-01-25 19:51:07 +01:00
Zbigniew Siciarz
6d00860ef8 Fix Debug implementation for DMat. 2015-01-24 18:24:35 +01:00
Sébastien Crozet
1b6a44e8fb Update to the last rust-nightly.
Version of rustc: 1.0.0-nightly (4874ca36f 2015-01-23 00:18:57 +0000).
2015-01-23 21:48:10 +01:00
Sébastien Crozet
08049e515e Coding style fixes. 2015-01-17 22:54:57 +01:00
arturo
f82cb8002d impl BaseNum for integers 2015-01-16 11:46:56 +01:00
Brett Levin
8c205ea2d0 fix warning from unneeded old_orphan_check 2015-01-10 11:31:26 -08:00
Eduard Bopp
1103996b83 Implement Arbitrary for (almost) all types
Rot4 and Iso4 had to be left out, since Rot4 apparently lacks a working
constructor.

Thereby (almost) all types in nalgebra can now be used for quickcheck-style
testing.

"arbitrary" is now a conditionally compiled feature that contains these impls
adding a dependency on quickcheck.
2015-01-10 01:36:13 +01:00
Sébastien Crozet
ce0178785c Fix automatic text replacement on comments. 2015-01-09 23:01:46 +01:00
Sébastien Crozet
53c80bc72b Allow unstable items.
Some of them don't have any stable equivalent yet.
2015-01-09 22:51:17 +01:00
Sébastien Crozet
4b47b1e98a Use slice and range syntax when possible. 2015-01-09 22:46:26 +01:00
Sébastien Crozet
2d4e1bfc95 Fix warnings related to the POrd implementation. 2015-01-09 22:34:57 +01:00
Sébastien Crozet
e6e099b7c4 Replace int, and uint, by isize and usize. 2015-01-09 22:26:05 +01:00
Sébastien Crozet
59316d7ca1 Remove tabs. 2015-01-09 22:22:34 +01:00
arturo
fc1fd16e20 fixes compiling on alpha 1.0 2015-01-09 21:55:15 +01:00
Sébastien Crozet
c708632036 Merge pull request #70 from bfops/fnmut
Change Fn to FnMut
2015-01-07 22:45:39 +01:00
Ben Foppa
f1fe7315f0 Change Fn to FnMut 2015-01-07 15:16:56 -05:00
Ben Foppa
bd7b4f287f rustup 2015-01-07 15:14:40 -05:00
Ben Foppa
1429cbf34e Remove obsolete closure syntax 2015-01-06 18:46:50 -05:00
Pierre Krieger
89edd64204 Update for Rustc 2015-01-05 15:12:06 +01:00
Sébastien Crozet
e94061ed10 Fix an unconstrained type in na::shape. 2015-01-04 19:43:04 +01:00
Sébastien Crozet
014aabb856 Update to the last rust-nightly.
Version of rustc: 0.13.0-nightly (c6c786671 2015-01-04 00:50:59 +0000).
2015-01-04 19:03:28 +01:00
Sébastien Crozet
0e2563a88f Merge pull request #61 from mikedilger/ulps
ApproxEq trait enhanced with ULPs method of specifying closeness:
2015-01-04 10:17:54 +01:00
Sébastien Crozet
018d4a2ec0 Remove glob imports. 2015-01-04 09:39:32 +01:00
Connorcpu
a18a53b82e Updated to latest rust master 2015-01-03 13:48:10 -08:00
Eduard Bopp
8f7aac0711 Update to latest Rust
The version is rustc 0.13.0-dev (cd614164e 2015-01-02 02:31:12 +0000).

The fixed array syntax was changed from [x, ..3] to [x; 3].
2015-01-03 15:19:52 +01:00
Ben Foppa
b701ca3b58 Update for last rustc of 2014! 2015-01-01 17:23:35 -05:00
Mike Dilger
122c95f2b4 fix macro 2015-01-01 10:41:07 +13:00
Mike Dilger
4c1cfb03cf ApproxEq trait enhanced with ULPs method of specifying closeness:
approx_eq_ulps() allows specification of epsilon as an integer number
  of Units in the Last Place (ULPs) difference between the two floating
  point values

  default approx_ulps() is set to 8.

  approx_eq() function continues to use epsilon method, although I
  recommend further commits and a migration towards the ULPs method.
2015-01-01 10:12:27 +13:00
Ben Foppa
0ba92a51bd Fix Encodable/Decodable deprecation warnings 2014-12-25 16:05:33 -05:00
Pierre Krieger
258e7465d4 Fix Neg trait taking self instead of &self 2014-12-23 19:09:06 +01:00
Pierre Krieger
7bfad8e118 Rename std::slice::Items -> std::slice::Iter 2014-12-23 19:01:49 +01:00
Eduard Bopp
e3c2d46f03 Add trailing ';' to all item macros
This is a fix for the latest nightly, see
https://github.com/rust-lang/rust/pull/19984.
2014-12-19 15:33:01 +01:00
Sébastien Crozet
a92c681d01 Update to the last rust-nightly.
Version of rustc: 0.13.0-nightly (42deaa5e4 2014-12-16 17:51:23 +0000).

Fix #54.
2014-12-17 23:39:47 +01:00
Eduard Bopp
11a2b84ee0 Derive Copy wherever sensible
Copy is now opt-in, see [1]. To keep the current library functionality it is
derived for all sensibly copyable types.

[1]: 096a28607f
2014-12-10 15:37:49 +01:00
Eduard Bopp
223dc316ad Update to latest Rust 2014-12-10 15:09:38 +01:00
Eduard Bopp
edaeab72ac Use object-oriented style for trait methods
Wherever sensible the geometric traits now take `&self` arguments, so that
implementations can be invoked as instance methods instead of static methods.
This makes some idioms easier to express and generally allows for greater
flexibility as the restructured methods can still be invoked like static
methods.

Fixes #39.
2014-12-01 19:44:43 +01:00
Sébastien Crozet
3b44441ce9 Update to the last rust-nightly.
Version of rustc: 0.13.0-nightly (fac5a0767 2014-11-26 22:37:06 +0000).
2014-11-30 15:47:31 +01:00
Sébastien Crozet
9d5d3f49f9 Do not mantion the double-dispatch on the doc. 2014-11-26 14:36:50 +01:00
Sébastien Crozet
d296bebfac Replace the double dispatch trick by multidispatch!
Fix #38.
2014-11-26 14:23:30 +01:00
Sébastien Crozet
3317e057f5 Add float constants to BaseFloat.
Fix #42.
2014-11-25 11:19:31 +01:00
Sébastien Crozet
40c14ace39 Make from_array-like methods static.
Fix #45.
2014-11-25 11:00:26 +01:00
Eduard Bopp
956c5cdecc Implement assertion macros for ApproxEq
These macros yield readable error messages as test assertions for ApproxEq
types. They can be invoked as:

    assert_approx_eq!(a, b);
    assert_approx_eq_eps!(a, b, eps);

Fixes #40.
2014-11-23 14:15:56 +01:00
Eduard Bopp
733219d728 Have ToHomogeneous use &self in method signature
I find makes the syntax a bit lighter.
2014-11-22 12:01:45 +01:00
Eduard Bopp
2f3b68bebb Fix erroneous Translate documentation
Looks like it's been copied & pasted without adapting.
2014-11-21 15:59:26 +01:00
Sébastien Crozet
bab38ca6d5 Add conversion from/to arrays for matrices and vectors.
Use `.as_array()`, `.as_array_mut()`, `.from_array_ref()`, `.from_array_mut()`.
Fix #33.
2014-11-21 11:34:46 +01:00
Sébastien Crozet
d8dfedbf99 Update to the last rust-nightly.
Version of rustc: 0.13.0-nightly (336349c93 2014-11-17 20:37:19 +0000).
2014-11-19 12:11:32 +01:00
Sébastien Crozet
77348f668f Use our own traits instead of the deprecated ones.
We might switch to bjz/num-rs eventually (#32), but in the mean time we just re-declare the
deprecrated traits in nalgebra.
2014-11-16 14:42:18 +01:00
Sébastien Crozet
39b9d20717 Quick update to the last rust-nightly.
This is just a quick-fix so that nalgebra compiles.
This does not fix the deprecation warnings!

Version of rustc: 0.13.0-nightly (d91a015ab 2014-11-14 23:37:27 +0000).
2014-11-15 15:47:59 +01:00
Sébastien Crozet
226b115f1e Overload DVec * DVec -> DVec and DVec / Dvec -> DVec.
Fix #31.
2014-11-06 23:17:35 +01:00
Sébastien Crozet
a2848e6e18 Update to the last rust-nightly.
Version of rustc: 0.13.0-nightly (63c4f22f2 2014-11-05 22:31:44 +0000).
2014-11-06 14:52:52 +01:00
Sébastien Crozet
3834913402 Update to the last rust-nightly.
Version of rustc: 0.13.0-nightly (3327ecca4 2014-11-01 22:41:48 +0000).
2014-11-02 22:47:11 +01:00
Sébastien Crozet
eb745df4bc Update to the last rust-nightly.
Version of rustc: 0.13.0-nightly (221fc1e3c 2014-10-31 02:27:15 +0000).
2014-10-31 17:40:47 +01:00
Sébastien Crozet
36d3e88cb0 Do not automatically impl Scalar{Mul,Div,Add,Sub}.
This makes them implementable without using the double dispatch trick.
2014-10-30 09:21:22 +01:00
Sébastien Crozet
93b184815f Always use Cast<f64> instead of Cast<f32>. 2014-10-30 09:21:22 +01:00
Sébastien Crozet
6b4b25acd4 Basis: add a method to compute the i-th element of the canonical basis. 2014-10-30 09:21:20 +01:00
Sébastien Crozet
171576e2a0 Move the eigen_qr function behind the EigenQR trait.
This simplifies generic programming.
2014-10-30 09:21:20 +01:00
Sébastien Crozet
27be1f0651 Add a SquareMat trait for square matrices. 2014-10-30 09:21:20 +01:00
Sébastien Crozet
6a194b2b62 Rename: Any{Vec,Pnt} to Num{Vec,Pnt} + do not impl them automatically.
Instead, implement them manually. This clarifies error messages for the users.
2014-10-30 09:21:19 +01:00
Sébastien Crozet
628aac0961 Coding style fix. 2014-10-30 09:21:18 +01:00
Sébastien Crozet
a0fffe93a9 Move the .shape() method to its own trait: Shape. 2014-10-30 09:21:18 +01:00
Sébastien Crozet
3354ffc37b Make FloatPnt and FloatVec derive from Index.
The point it that `Index` provides the i-th element decomposed into the trivial basis of their
associated vector spaces.
2014-10-30 08:38:05 +01:00
Sébastien Crozet
2b23446d54 Matrix Index/IndexMut implementation: return an element instead of a column.
There is no reason why indexing would prefer returning a column instead of a line. Instead, we
return an element, and let the user use the `Col` and `Row` traits istead.
2014-10-30 08:38:05 +01:00
Sébastien Crozet
eb24c4063f Remove the {Any,Float}{Pnt,Vec}Ext traits.
They are meaningless and too hard to implement in an ad-hoc way to be really useful.
2014-10-30 08:38:05 +01:00
Sébastien Crozet
074c9356bf Rename: PartialOrd -> POrd, PartialOrdering -> POrdering.
This avoids name clashes with the standard library.
2014-10-30 08:38:05 +01:00
Sébastien Crozet
a960afa4f9 Make AnyVec inherit from Basis.
Every vector must have a basis.
2014-10-30 08:38:05 +01:00
Sébastien Crozet
2f273d655a Rename: VecExt -> AnyVecExt, PntExt -> AnyPntExt. 2014-10-30 08:38:05 +01:00
Steve Klabnik
426ba307ab fail -> panic 2014-10-30 00:25:47 -04:00
Robin Gloster
4e4eb62ffc upgrade to newer rust 2014-10-22 13:35:17 +02:00
Sébastien Crozet
e2fc8aa764 Deprecate to_pnt, as_pnt and VecAsPnt.
Those are meaningless. Use `na::orig() + the_vector` instead.
2014-10-20 22:35:43 +02:00
Sébastien Crozet
276bf3f999 Update to the last rust-nightly.
Version of rustc: 0.13.0-nightly (222ae8b9b 2014-10-18 00:47:22 +0000).
2014-10-18 20:52:35 +02:00
Sébastien Crozet
8288ebdfab Add quaternions to the feature list. 2014-10-14 22:24:10 +02:00
Sébastien Crozet
5ba9f27530 Add quaternions.
Fix #24.
2014-10-14 22:20:49 +02:00
Sébastien Crozet
162346ab47 Fix typos. 2014-10-13 08:46:39 +02:00
Sébastien Crozet
0cf725f5f2 Add 3D orthogonal and perspective projection structures.
Fix #26.
2014-10-12 20:40:46 +02:00
Sébastien Crozet
03eda09084 Some documentation fixes.
Fix #25.
2014-10-12 10:35:56 +02:00
Sébastien Crozet
b6090042ac Add a Axpy that implements y <- y + ax.
This is very useful for accumulations to compute, e.g. centers.
2014-10-12 09:24:16 +02:00
Sébastien Crozet
de2479b70f Do not implement Transform<Vec*> for Vec*.
This is error prone as this is a no-op for vectors and a translation for points.
2014-10-11 00:23:10 +02:00
Sébastien Crozet
70de340498 Remove the Iso * Vec overload and the ability to Transform a Vector with an Iso.
This is too error prone as the user has to remember if he is using a vector or a point.
Istead, to transform a vector with an Isometry, use the internal rotation matrix of the isometry:
`iso.rotation * vector` instead of `iso * vector`.

The `Rotation` trait can also be used.
2014-10-10 22:21:05 +02:00
Sébastien Crozet
bf67f079e7 Add a function nalgebra::center(a, b) that computes the center of two points. 2014-10-10 21:24:18 +02:00
Sébastien Crozet
b3e7540b3c Delete the deprecated na:: module. 2014-10-10 20:57:20 +02:00
Sébastien Crozet
6fb6d35980 Documentation fixes. 2014-10-10 20:56:40 +02:00
Sébastien Crozet
e852eb4783 Fix the implementation of ToHomogeneous for Iso*. 2014-10-10 20:56:24 +02:00
Sébastien Crozet
7e9bb98823 Add to_pnt and to_vec methods. 2014-10-10 12:19:37 +02:00
Sébastien Crozet
924d8269d8 Add points.
This adds the Pnt{1,2,3,4,5,6} structures.
This adds the traits:
  − AnyPnt
  − FloatPnt
  − PntExt
  − FloatPntExt
  − Orig (to return the zero point)
  − PntAsVec
  − VecAsPnt
This adds operator overloading:
  − Pnt + Vec
  − Pnt - Vec
  − Pnt * Scalar
  − Pnt / Scalar
  − Pnt + Scalar
  − Pnt - Scalar
  − Iso * Pnt
  − Rot * Pnt
  − Pnt * Iso
  − Pnt * Rot
This changes some behavior:
  − Iso multiplication with a Vec does not translate the vector any more.
  − ToHomogeneous adds a 0.0 at the end of a Vec and a 1.0 at the end of a Pnt.
  − FromHomogeneous performs w-normalization on a Pnt, but not on a Vec.
  − The Translate<Vec> trait is never implemented (i-e. a Vec is not to be translated).

cc #25
2014-10-10 11:45:20 +02:00
Sébastien Crozet
ba18f5aa70 Deprecate na::, move all reexport to the root crate.
This also moves the tests and benches to cargo-complient folders.

Fix #21.
2014-09-28 19:22:57 +02:00
Sébastien Crozet
8f89ac421c Update to the last rust.
Version of rustc: rustc 0.12.0-nightly (d64b4103d 2014-09-26 21:47:47 +0000).
2014-09-27 09:54:03 +02:00
Sébastien Crozet
a9c7fe7420 Fix the matrix inversion test.
This prevent the test from failing when the matrix is non-inversible.
2014-09-19 23:53:36 +02:00
Sébastien Crozet
086088a0ed Fix the implementation of Row for fixed-size matrices.
Matrices are column-major.
2014-09-19 23:51:27 +02:00
Sébastien Crozet
1945cb09f2 Merge pull request #20 from bjz/warnings
Fix warnings
2014-09-19 23:43:46 +02:00
Brendan Zabarauskas
d3abbfcd4c Fix warnings 2014-09-18 15:20:04 +10:00
Brendan Zabarauskas
b6959ef913 Implement index operators
Closes #18
2014-09-18 12:23:52 +10:00
Ben Foppa
6c8f14966c update for rustc 21d1f4d7c 2014-09-15 21:30:36 -04:00
Sébastien Crozet
560dff3891 Update to the last rust-nightly.
Version of rustc: 0.12.0-pre-nightly (2e92c67dc 2014-08-28 23:56:20 +0000).
2014-08-29 21:35:42 +02:00
Sébastien Crozet
c408d5a0b2 Update to the last rust-nightly.
Version of rustc: 0.12.0-pre-nightly (01ec6fab2 2014-08-18 00:46:10 +0000).
2014-08-18 19:35:47 +02:00
Sébastien Crozet
ff95e2a9d8 Remove the shifting from the qr algorithm. 2014-08-17 22:42:16 +02:00
Sébastien Crozet
844092205e Do not compute the matrix inverse if the determinant is near-zero. 2014-08-17 22:41:55 +02:00
Sébastien Crozet
314f0c0043 Add na::eigen_qr that performs an eigendecomposition using the qr algorithm. 2014-08-16 15:34:34 +02:00
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
5b1388888b Update the compilation section of the README. 2014-07-14 17:56:35 +02:00
Sébastien Crozet
65211aa89a Cleanup the Makefile + update travis.yml. 2014-07-14 16:27:46 +02:00
Sébastien Crozet
11ee4e46b1 Make cargo build a rlib too. 2014-07-14 13:48:31 +02:00
Sébastien Crozet
2ff660dfe1 Add a ScalarMul and a ScalarDiv trait.
Those might be useful to overcome rust limitations wrt operator overloading.
2014-07-13 11:43:05 +02: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
ecbc159521 Update some links to point on nalgebra.org. 2014-06-09 21:48:24 +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
73c6610048 new_identity and housholder matrix available under na:: 2014-05-12 21:54:59 +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
dcf7b8ad01 generic implementation of QR decomposition
But static matrices can't use it yet, they need to implement the
Row/Col slicing traits.
2014-05-11 21:20:41 +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
a213a3da93 fixing style issues 2014-05-10 12:48:25 +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
503b567b27 Update to latest Rust.
Version of rustc: rustc 0.10-pre (4d64441 2014-03-12 15:07:06 -0700)
2014-03-13 18:20:04 -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
9a49bb5895 Update to the last Rust.
Version of rustc: 0.10-pre (698042d 2014-02-21 21:26:49 -0800)
2014-02-22 09:09:04 +01:00
Sébastien Crozet
0eab5e0d4f Add free functions for partial ordering comparison operators. 2014-02-18 12:53:15 +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
96e77e4cfd Update to the last Rust.
Version of rustc: 0.10-pre (9a672f9 2014-02-05 18:31:36 -0800)
2014-02-06 08:59:27 +01:00
Sébastien Crozet
85c67b5544 Activate the unused_results lint. 2014-01-31 15:26:25 +01:00
Sébastien Crozet
d50afdf645 Update to the last Rust.
Version of rustc: 0.10-pre (e3b1f3c 2014-01-29 23:46:26 -0800)
2014-01-30 11:28:15 +01:00
Sébastien Crozet
4c262bb91d Remove useless parenthesis. 2014-01-23 01:22:23 +01:00
Sébastien Crozet
f018478117 Fix the doc root url. 2014-01-21 08:24:23 +01:00
Sébastien Crozet
836a0d40ae Modify .travis.yml to generate the documentation. 2014-01-21 08:13:10 +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
9dd8bb4ea2 Fix the documentation for na::inv_translate. 2014-01-19 16:22:58 +01:00
Sébastien Crozet
5463da79ae Make make test test the documentation examples too. 2014-01-19 16:16:12 +01:00
Sébastien Crozet
79008262cb Doc: fix some typos. 2014-01-19 15:49:32 +01:00
Sébastien Crozet
cbebbe8961 Add the html_doc_url attribute. 2014-01-18 19:57:36 +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
096cce413f Update to the last Rust.
The `Bounded` trait is no longer on the Rust prelude.
2014-01-16 08:17:44 +01:00
Sébastien Crozet
98b2aa8b9c Revert "Update to the last Rust."
This reverts commit c1b91eefbb.

As a matter of fact, Bounded has not been deleted.
However it is no longer automatically exported by the stdlib.
2014-01-16 08:15:57 +01:00
Sébastien Crozet
c1b91eefbb Update to the last Rust.
The `Bounded` trait does not exist any more.
2014-01-16 08:12:33 +01:00
Sébastien Crozet
3e41e18c32 Fix the example on the README. 2014-01-14 09:52:18 +01:00
Sébastien Crozet
f026585b63 Fix the link to the online documentation. 2014-01-14 09:48:03 +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
1672e9e5d2 Inline the default implementation of approx_eq 2014-01-09 20:53:01 +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
Sébastien Crozet
db831f922e Update to the last Rust. 2013-12-24 11:46:16 +01:00
Sébastien Crozet
effb1632d1 Update to the last Rust: pkgid -> crate_id 2013-12-20 12:55:15 +01:00
Jan Niklas Hasse
396d394ab9 Use new std::vec functions 2013-12-16 12:04:02 +01:00
Sébastien Crozet
e25bac3565 Fix pkgid. 2013-12-12 18:08:05 +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
0523e1c701 Add a free function to prepend a rotation. 2013-11-24 23:56:44 +01:00
Sébastien Crozet
4addd531cf Add incomplete implementation of 4D rotation. 2013-11-22 09:46:48 +01:00
Sébastien Crozet
4b03e2de95 Replace std::num::One::one() by std::num::one() on examples. 2013-10-18 11:59:32 +02: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
20bdbb6408 Dont re-export std::num::{Zero, One}.
This is useless.
2013-10-10 00:45:56 +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
1c0b60c3ef Add a link to the on-line documentation. 2013-10-08 02:10:35 +02:00
Sébastien Crozet
d25534610d Add a one-line description to each free-function.
This is better than nothing.
2013-10-08 01:59:15 +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
3f99bd62c6 Use use instead of pub use to import modules on the examples. 2013-10-06 19:36:59 +02:00
Sébastien Crozet
ee2db8da99 Add the "nalgebra in use" part to the readme. 2013-10-06 19:32:31 +02:00
Sébastien Crozet
d0267f5071 Fix the example given by the readme. 2013-10-06 19:28:52 +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
Sébastien Crozet
2356723e90 Add some impls for 4d rotations.
It is not possible to create a 4d rotation yet.
2013-10-03 23:58:36 +02:00
Sébastien Crozet
820790bfa9 Add pointwise multiplication and division for vectors. 2013-10-03 18:25:57 +02:00