Commit Graph

92 Commits

Author SHA1 Message Date
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
1edecbcee4 Automatically derive TotalEq whenever Eq is derived. 2014-03-28 21:40:30 +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
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
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
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
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
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
1e71dc1d0a Add unchecked access to vector components on the Indexable trait. 2013-12-01 20:17:18 +01:00
Sébastien Crozet
b244975f93 Update to the last Rust. 2013-11-27 11:24:29 +01: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
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
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
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
b364920d9b Move the Round trait inheritance from VecExt to AlgebraicVecExt.
What it the point of rounding an integer-valued vector?
2013-10-03 00:57:43 +02:00
Sébastien Crozet
d4ee651305 Move the Basis trait inheritance from VecExt to AlgebraicVecExt.
The Basis trait cannot be implemented if the vector is not algebraic anyway.
2013-10-03 00:45:50 +02:00
Sébastien Crozet
a54c42229b Update to the last Rust: remove the float type. 2013-10-02 11:52:10 +02:00
Sébastien Crozet
c344be7351 Minor doc improvements. 2013-09-26 17:19:42 +02:00
Sébastien Crozet
b61d621090 Update to the last Rust. 2013-09-26 17:05:11 +02:00
Sébastien Crozet
4ffe274b03 Add mean and covariance computation for DMat.
This also fixes the transposition for rectangular DMat, and add scalar
addition/subtraction/multiplication/division for DMat.
2013-09-22 15:47:53 +02:00
Sébastien Crozet
7de844b46a Moved some files + use rustdoc_ng to generate the documenatiton.
Trait failes are merged in three files:
    * operations.rs - for low-level matrix/vector operations
    * geometry.rs   - for operations with a clear, broadly known geometric meaning.
    * structure.rs  - for operations to access/alter the object inner structures.

Specialisations are moved to the `spec` folder.
2013-09-22 11:05:15 +02:00
Sébastien Crozet
9a9de20b8a Remove the redundant Column trait + Add unchecked access indexing to dynamic matrices/vectors. 2013-09-20 22:17:55 +02:00
Sébastien Crozet
6dc8139794 "Remove" the RMul and LMul trait. Use the regular Mul trait.
Those traits are not really removed since they are useful on generic code (to work around curret
limitations of rust traits system).
2013-09-15 11:18:06 +02:00
Sébastien Crozet
514bf74efe "Replaced" Scalar{Add, Sub, Mul, Div} by operator overloading.
Those traits are not really removed since rust cannot handle those multiple operator overloading
very well yet, making them sometimes unuseable on generic code.
2013-09-14 21:32:38 +02:00
Sébastien Crozet
6f81fc6d5c Add Absolute, Col, Mat, AbsoluteRotate traits.
Traits like `AbsoluteRotate` and `RotationWithTranslation` have been moved to a `comp` folder
containing any trait providing operations which are combination of several traits.
2013-09-13 10:26:19 +02:00
Sébastien Crozet
bdf82748dc Add a Dot and a Norm trait for vectors having a dot product and a norm.
Those methods are not part of the `Vec` and `AlgebraicVec` traits any more.
2013-09-08 18:20:06 +02:00
Sébastien Crozet
2ccd62d558 Add methods to set the translation/rotation/transformation directly. 2013-09-06 08:48:08 +02:00
Sébastien Crozet
539e34c2bf Move all the rotation-related free functions to a RotationWithTranslation trait.
This is not a very good name though.
2013-09-04 17:07:56 +02:00
Sébastien Crozet
82ddda154f Update to work with the last compiler.
Because of the unfortunate changes on type parameters resolution:
        - the Dim trait now needs an useless parameter to infer the Self type.
        - ApproxEps::epsilon() is broken.
2013-08-28 14:22:12 +02:00
Sébastien Crozet
7052aa88ee Add two traits: CrossMatrix and Row.
CrossMatrix is a trait for vectors having a cross product representable as a matrix.
Row is a trait for Matrixces and Vectors, to access (by index) their rows.
2013-08-25 23:01:44 +02:00
Sébastien Crozet
833378d83f Add and Identity matrix type.
It implements most matrix traits but all its operations are no-ops.
2013-08-23 15:59:26 +02:00
Sébastien Crozet
6999444575 Merge the Rotatable, Translatable, Transformable traits with their corresponding Rotation, Translation, Transformation. 2013-08-22 17:47:37 +02:00
Sébastien Crozet
347883caa1 Rework of the traits for Vectors.
The goal is to make traits less fine-grained for vectors, and reduce the amount of `use`.

- Scalar{Mul, Div} are removed, replaced by Mul<N, V> and Div<N, V>,
- Ring and DivisionRing are removed. Use Num instead.
- VectorSpace, Dot, and Norm are removed, replaced by the new, higher-level traits.

Add four traits:
- Vec: common operations on vectors. Replaces VectorSpace and Dot.
- AlgebraicVec: Vec + the old Norm trait.
- VecExt: Vec + every other traits vectors implement.
- AlgebraicVecExt: AlgebraicVec + VecExt.
2013-08-18 18:33:25 +02:00
Sébastien Crozet
cead4f8410 Moved DivisionRing to ring.rs. 2013-08-17 17:50:01 +02:00
Sébastien Crozet
344d761be5 Add the ability to stop the basis internal itertors. 2013-08-17 10:48:45 +02:00
Sébastien Crozet
d8db04cce5 Changed the UniformSphereSample trait to return a borrowed vector. 2013-08-16 18:08:51 +02:00
Sébastien Crozet
5187a1a73f Add Round impl for vectors. 2013-08-15 10:41:47 +02:00
Sébastien Crozet
a69f43bccd Remove some unneded visibility modifiers. 2013-08-14 09:43:02 +02:00
Sébastien Crozet
b08a8384ae Add outer product. 2013-08-12 16:45:31 +02:00
Sébastien Crozet
3858c63291 Update to work with the last Rust api. 2013-08-11 16:07:34 +02:00