Commit Graph

191 Commits

Author SHA1 Message Date
Sébastien Crozet 12fa938516 Merge pull request #686 from rustsim/fix_vector_slerp
Fix slerp for regular vectors.
2020-03-02 12:45:38 +01:00
sebcrozet 5f4a0c7b13 Fix slerp for regular vectors. 2020-03-02 12:45:38 +01:00
Avi Weinstock 774f4da3e2 Add `Clone` to `Scalar`, providing a default implementation of `inlined_clone`. Change `Scalar + Clone` bounds to just `Scalar`. 2020-03-02 12:45:37 +01:00
Avi Weinstock 52aac8b975 Add inlined_clone to Scalar, and relax bounds from `Scalar + Copy` to `Scalar + Clone` nearly everywhere.
The various nalgebra-lapack FooScalars are still Copy because they make use of uninitialized memory.
nalgebgra-glm Number still uses Copy because upstream `approx` requires it.
2020-03-02 12:45:37 +01:00
Avi Weinstock 6c236af696 Add Scalar + Copy bounds to code that's under feature flags.
`./ci/test.sh` now passes locally.

Refactoring done via the following sed commands:
```bash
export RELEVANT_SOURCEFILES="$(find src -name '*.rs') $(find examples -name '*.rs')"
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Arbitrary\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Serialize\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Deserialize\)/N\1: Scalar + Copy + \2/' $f; do
export RELEVANT_SOURCEFILES="$(find nalgebra-glm -name '*.rs')"
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar,/N\1: Scalar + Copy,/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar>/N\1: Scalar + Copy>/' $f; done
for f in algebra-glm/src/traits.rs; do sed -i 's/Scalar + Ring/Scalar + Copy + Ring>/' $f; done # Number trait definition
```
2020-03-02 12:45:37 +01:00
Avi Weinstock 7d99015473 Move `Copy` constraint from the definition of `Scalar` to all its use-sites.
This should semantically be a no-op, but enables refactorings to use non-Copy scalars on a case-by-case basis.
Also, the only instance of a `One + Zero` trait bound was changed into a `Zero + One` bound to match the others.

The following sed scripts were used in the refactoring (with each clause added to reduce the error count of `cargo check`):

```bash
export RELEVANT_SOURCEFILES="$(find src -name '*.rs') $(find examples -name '*.rs')"
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar,/N: Scalar+Copy,/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + Field/N: Scalar + Copy + Field/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + Zero/N: Scalar + Copy + Zero/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + Closed/N: Scalar + Copy + Closed/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + Eq/N: Scalar + Copy + Eq/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + PartialOrd/N: Scalar + Copy + PartialOrd/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: *Scalar + Zero/N: Scalar + Copy + Zero/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + PartialEq/N: Scalar + Copy + PartialEq/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar>/N: Scalar+Copy>/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: Scalar + $bound/N: Scalar + Copy + $bound/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: *Scalar + $bound/N: Scalar + Copy + $bound/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\): *Scalar,/N\1: Scalar+Copy,/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N: *Scalar + $trait/N: Scalar + Copy + $trait/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\): *Scalar + Superset/N\1: Scalar + Copy + Superset/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\): *Scalar + \([a-zA-Z]*Eq\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \([a-zA-Z]*Eq\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(hash::\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar {/N\1: Scalar + Copy {/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Zero\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Bounded\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Lattice\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Meet\|Join\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(fmt::\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Ring\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Hash\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Send\|Sync\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/One + Zero/Zero + One/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \(Zero\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar + \($marker\)/N\1: Scalar + Copy + \2/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/N\([0-9]\?\): *Scalar>/N\1: Scalar + Copy>/' $f; done
for f in $RELEVANT_SOURCEFILES; do sed -i 's/Scalar+Copy/Scalar + Copy/' $f; done
```
2020-03-02 12:45:37 +01:00
thibault 67f3379b34 Corrected typo. 2019-10-28 14:15:03 +01:00
thibault 7773f13016 Changed name. Changed argument. Added documentation line. 2019-10-28 14:15:03 +01:00
thibault dacd15e927 Added function to compute the mean quaternion from a vector of unit quaternions. 2019-10-28 14:15:03 +01:00
Jake Shadle 4fa4a6b854 HTTPS All The Things (#608)
* Use https for all links where it is valid

* Fix random links to external sites
2019-08-27 22:05:28 +02:00
Christian Authmann 589aebbf85 Add #[must_use] to all functions with a _mut variant (#598) 2019-06-05 23:04:04 +02:00
Mara Bos 85c931520a Implement Default for Quaternion and UnitQuaternion. 2019-04-16 10:12:09 +02:00
sebcrozet ae4afa3d2c Merge branch 'master-public' into dev
# Conflicts:
#	Cargo.toml
#	src/base/matrix.rs
#	src/geometry/quaternion.rs
2019-03-31 16:33:25 +02:00
sebcrozet 94a8babcdc Uncomment the fast renormalization of Rotation2. 2019-03-31 14:34:07 +02:00
sebcrozet 55873cae37 Fix compilation with no-std. 2019-03-31 12:06:26 +02:00
sebcrozet ba40e8eb55 Fix merge errors due to the switch to rust 2018. 2019-03-31 10:53:31 +02:00
sebcrozet 38ef0cbf7b Merge branch 'dev' into complex
# Conflicts:
#	src/base/ops.rs
#	src/geometry/isometry.rs
#	src/geometry/quaternion.rs
#	src/geometry/quaternion_construction.rs
#	src/geometry/rotation.rs
#	src/geometry/similarity.rs
#	src/geometry/transform.rs
#	src/geometry/translation.rs
#	src/geometry/unit_complex.rs
2019-03-31 10:48:59 +02:00
Adam Nemecek 1e04053a21 refactoring 2019-03-31 10:34:03 +02:00
Adam Nemecek e416360fc9 geometric operations 2019-03-31 10:34:03 +02:00
Simon Puchert 74aefd9c23 Improve precision of UnitQuaternion::angle (#569)
The previous implementation had stability problems for small angles due
to the behaviour of the arccosine it used. In particular, it needs a
hack to handle "cosines" greater than 1 and the smallest obtainable
nonzero angle for e.g. f32 is acos(1-2^-22) = 0.00069...
These problems can be fixed by using an arctangent-based formula.
2019-03-31 10:32:34 +02:00
sebcrozet 4ef4001836 Rename Real to RealField. 2019-03-25 11:21:41 +01:00
sebcrozet 5b28c39fa7 Rename Complex to ComplexField. 2019-03-25 11:19:36 +01:00
sebcrozet 3cbe60523a 2018 edition. 2019-03-23 14:33:47 +01:00
sebcrozet ce24ea972e Remove all spurious allocation introduced by complex number support on decompositions. 2019-03-23 14:13:00 +01:00
sebcrozet 921a05d523 Implement some BLAS opertaions involving adjoint. 2019-03-23 11:48:12 +01:00
sebcrozet 2f0d95bdbb Fix most tests. 2019-03-19 12:00:10 +01:00
sebcrozet e4748c69ce Start fixing SVD. 2019-03-18 11:23:19 +01:00
adamnemecek 1e614db227 Quaternionic division + refactoring (#563) 2019-03-18 09:08:42 +01:00
Sébastien Crozet fac012a775
Merge pull request #558 from tpdickso/geometric-transform-point
Add the `transform` methods as inherent methods on geometric types
2019-03-16 10:06:00 +01:00
Sébastien Crozet a2c0a453d3
Add operator explanation to docs
Co-Authored-By: tpdickso <tpdickso@uwaterloo.ca>
2019-03-15 10:50:47 -04:00
sebcrozet 010c009cff Fix Schur decomposition. 2019-03-12 13:15:02 +01:00
Adam Nemecek edb08cd900 quaternion trigonometry 2019-03-04 08:36:46 -08:00
sebcrozet 77f048b6b9 WIP use Complex instead of Real whenever possible on the linalg module. 2019-03-02 19:33:49 +01:00
Benjamin Hetherington aeff67ecbd Correct typo in quaternion documentation (#559)
Correct "looses" to "loses" in quaternion.rs documentation.
2019-02-25 17:34:13 +01:00
Terence 2a2e9d7f8e Add the `transform` methods as inherent methods on geometric types
This adds `transform_point`, `transform_vector`,
`inverse_transform_point` and `inverse_transform_vector` as inherent
methods on the applicable geometric transformation structures, such
that they can be used without the need to import the `Transformation`
and `ProjectiveTransformation` traits from `alga`.
2019-02-24 11:29:27 -05:00
adamnemecek 704331be4f added Quaternion accessors for r,i,j,k, refactored conjugate to use imag (#551) 2019-02-23 16:03:01 +01:00
sebcrozet 7c91f2eeb5 Use Complex instead of Real whenever possible on the base/ module. 2019-02-23 11:24:07 +01:00
Sébastien Crozet c97dfaf381
Add renormalization and rotation extraction from general 2D and 3D matrices. (#549)
* Add From impls to convert between UnitQuaterion/UnitComplex and Rotation2/3

* Add rotation extraction from a Matrix2 or Matrix3.

* Add fast Taylor renormalization for Unit.

Fix 376.

* Add renormalization for Rotation3.

Renormalization for Rotation2 requires Complex to implement VectorSpace which will be fixed only on alga v0.9

* Update Changelog.
2019-02-18 22:41:46 +01:00
adamnemecek 975d72f070 Replace explicit types with Self where possible. 2019-02-16 22:29:41 +01:00
sebcrozet 08f31837a8 Update to alga 0.8. 2019-02-03 15:52:15 +01:00
sebcrozet fc24db8ff3 Merge branch 'master-public' into sparse
# Conflicts:
#	Cargo.toml
#	examples/matrix_construction.rs
#	nalgebra-glm/src/constructors.rs
#	nalgebra-glm/src/ext/matrix_clip_space.rs
#	nalgebra-glm/src/ext/matrix_transform.rs
#	nalgebra-glm/src/ext/mod.rs
#	nalgebra-glm/src/ext/quaternion_common.rs
#	nalgebra-glm/src/gtx/quaternion.rs
#	nalgebra-glm/src/gtx/rotate_vector.rs
#	nalgebra-glm/src/lib.rs
#	nalgebra-glm/src/traits.rs
#	nalgebra-lapack/src/cholesky.rs
#	nalgebra-lapack/src/eigen.rs
#	nalgebra-lapack/src/hessenberg.rs
#	nalgebra-lapack/src/lu.rs
#	nalgebra-lapack/src/qr.rs
#	nalgebra-lapack/src/schur.rs
#	nalgebra-lapack/src/svd.rs
#	nalgebra-lapack/src/symmetric_eigen.rs
#	rustfmt.toml
#	src/base/array_storage.rs
#	src/base/blas.rs
#	src/base/cg.rs
#	src/base/default_allocator.rs
#	src/base/edition.rs
#	src/base/iter.rs
#	src/base/matrix.rs
#	src/base/swizzle.rs
#	src/base/vec_storage.rs
#	src/geometry/mod.rs
#	src/geometry/point_construction.rs
#	src/geometry/quaternion.rs
#	src/geometry/similarity.rs
#	src/geometry/translation.rs
#	src/geometry/unit_complex_construction.rs
#	src/linalg/bidiagonal.rs
#	src/linalg/cholesky.rs
#	src/linalg/full_piv_lu.rs
#	src/linalg/hessenberg.rs
#	src/linalg/lu.rs
#	src/linalg/permutation_sequence.rs
#	src/linalg/qr.rs
#	src/linalg/schur.rs
#	src/linalg/svd.rs
#	src/linalg/symmetric_eigen.rs
#	src/linalg/symmetric_tridiagonal.rs
#	tests/geometry/point.rs
#	tests/geometry/quaternion.rs
#	tests/lib.rs
#	tests/linalg/eigen.rs
#	tests/linalg/svd.rs
2019-02-03 12:53:41 +01:00
sebcrozet 381fdb642c Remove useless extern crate in doc-tests. 2019-02-03 11:01:11 +01:00
sebcrozet 13f76efe36 Add simple constructors for pure-translation and pure-rotation isometries. 2019-01-29 12:04:23 +01:00
Gedl 59b0709fcf Retain new_observer_frame as a deprecated wrapper function 2019-01-17 10:17:00 +01:00
Gedl 3fdcf5329d Rename ::new_observer_frame to ::face_towards 2019-01-16 22:41:25 +01:00
sebcrozet 5569850dbd Fix examples on stable. 2018-12-29 15:32:09 +01:00
Sébastien Crozet 564246ec1c
Merge pull request #507 from burtonageo/update_deps_2
Update dependencies, and fix tests from fallout
2018-12-29 14:33:53 +01:00
sebcrozet be8d1ce3ce Fix compilation errors related to rand. 2018-12-29 14:22:24 +01:00
Jack Wrenn 57123ed6aa Overloaded Indexing 2018-12-29 13:41:56 +01:00
sebcrozet f36ff97d6a Fix deprecation warnings. 2018-12-29 13:19:09 +01:00
sebcrozet a14d8a4cb2 Add coordinates access to translations.
Fix #509.
2018-12-26 15:19:50 +01:00
George Burton 6a4323d0ea Fix unintentional change 2018-12-18 14:46:29 +00:00
George Burton 9c37c51203 Update dependencies, and fix tests from fallout 2018-12-18 14:44:53 +00:00
Jack Wrenn 2595db1607 Fix doctests broken by 35d2381a2a 2018-12-16 12:58:20 +01:00
Jack Wrenn 0d47a8e16b Rename `Perspective3::unwrap` to `Perspective3::into_inner` and deprecate `Perspective3::unwrap`
See #460
2018-12-16 12:58:20 +01:00
Jack Wrenn 9600c45dd4 Rename `Orthographic3::unwrap` to `Orthographic3::into_inner` and deprecate `Orthographic3::unwrap`
See #460
2018-12-16 12:58:20 +01:00
Jack Wrenn 43c5f4cb73 Rename `Transform::unwrap` to `Transform::into_inner` and deprecate `Transform::unwrap`
See #460
2018-12-16 12:58:20 +01:00
Jack Wrenn 35ab64b086 Rename `Rotation::unwrap` to `Rotation::into_inner` and deprecate `Rotation::unwrap`
See #460
2018-12-16 12:58:20 +01:00
Jack Wrenn 0ab137bfcf Rename `Unit::unwrap` to `Unit::into_inner` and deprecate `Unit::unwrap`
See #460
2018-12-16 12:58:20 +01:00
sebcrozet c69ab193be Fix cornercase for Rotation3 conversion to euler angles.
Fix #494
2018-12-04 22:04:07 +01:00
Jack Wrenn 72d89c75ae Group swizzle methods by dimensional requirement.
This is semantically equivalent, but improves the rendered documentation.
2018-11-24 08:03:54 +01:00
sebcrozet f972d1dd7e Small dimension check fix for swizzling. 2018-11-23 07:01:35 +01:00
Jack Wrenn 74ff6ae199 Implement `Point` swizzling 2018-11-23 06:34:00 +01:00
Jochen Görtler 85bfae5390 RFC: Add comment in `Rotation::to_homogeneous()` 2018-11-20 17:47:29 +01:00
sebcrozet bd7d0be7a8 Remove over-restrictive assertions on Orthographic3 construction + add doc-tests.
Fix #365
2018-11-10 12:57:47 +01:00
sebcrozet 69490c2cea Add doc-tests to Transform. 2018-11-10 11:20:34 +01:00
sebcrozet b6d741c593 Document similarity_construction.rs. 2018-11-10 11:20:34 +01:00
sebcrozet a8a9a3082a Add doc-tests to unit_complex_construction. 2018-11-10 11:20:34 +01:00
sebcrozet ff5b64e35d Add doc-tests to unit_complex.rs. 2018-11-10 11:20:34 +01:00
sebcrozet 536923f9fc Add doc-tests to rotation_specialization. 2018-11-10 11:20:34 +01:00
sebcrozet 80fc057ead Add doc-tests to rotation_construction. 2018-11-10 11:20:34 +01:00
sebcrozet 7d9d47d9ea Complete doc-tests of rotation.rs. 2018-11-10 11:20:34 +01:00
sebcrozet c24caa311f Add some documentation for Rotation. 2018-11-10 11:20:34 +01:00
sebcrozet 8341ec2f10 Run rustfmt. 2018-11-06 18:32:20 +01:00
sebcrozet a7acd5b832 Fix missing type annotation. 2018-11-01 11:07:36 +01:00
sebcrozet 2119c1adf5 Complete documentation for quaternions. 2018-11-01 11:07:36 +01:00
sebcrozet 911ddca588 Implement From<Vector> for Translation and Quaternion. 2018-11-01 11:07:36 +01:00
sebcrozet 96db8e564a Complete the documentation for Translation. 2018-11-01 11:07:36 +01:00
sebcrozet 1dd6bcce6a Add doc-tests to most of quaternion.rs. 2018-11-01 11:07:36 +01:00
sebcrozet 98b0b842e9 Remove the inherent clone method from points.
Fix #458.
2018-11-01 10:22:10 +01:00
sebcrozet 4ce6555b96 Add more point and quaternion documentation. 2018-10-27 15:00:18 +02:00
sebcrozet b32a02f0ac Add doc-tests to point_construction.rs 2018-10-27 15:00:18 +02:00
sebcrozet 551c44c854 Implement From<Vector> for Point. 2018-10-27 15:00:18 +02:00
sebcrozet 6d63a0a5f1 Add doc-tests to isometry_construction.rs 2018-10-27 15:00:18 +02:00
sebcrozet a512e16868 Add doc-tests to isometry.rs. 2018-10-27 15:00:18 +02:00
sebcrozet 14ad10a7e0 Add rustfmt.toml and run it. 2018-10-27 15:00:18 +02:00
sebcrozet 5ea612ef96 Remove mention to the eye and target on the unit quaternion look_at_* methods. 2018-10-27 15:00:18 +02:00
sebcrozet 0d24cf4dc0 Run rustmt. 2018-10-20 22:26:44 +02:00
sebcrozet 9e2541f949 Add a Point::from_slice 2018-10-13 13:13:48 +02:00
sebcrozet 18e9b8998d Add impls of From/Into to convert any transformation types to a matrix. 2018-10-13 11:25:19 +02:00
sebcrozet c7c156a6a0 Use other keywords for isometry documentations.
Fix #419.
2018-10-06 07:27:40 +02:00
sebcrozet f218186ec0 Add Rotation * Unit<Vector> 2018-09-24 22:05:15 +02:00
Bruce Mitchener 175c41ed3a Typo fixes. 2018-09-24 21:15:07 +02:00
sebcrozet 38c7ed3a11 Add methods to see a Perspective3 or Orthographic3 as a Projective3. 2018-09-22 16:15:11 +02:00
sebcrozet 7884f20ea7 Add quaternion dot product. 2018-09-22 16:15:11 +02:00
sebcrozet 832bf42b56 Add slerp for unit vectors. 2018-09-22 16:15:11 +02:00
Jacob Kiesel 787d20cff4 Add magnitude synonym functions for ease of use 2018-09-21 18:28:44 +02:00
sebcrozet 08685122ea Fix projective * point multiplication.
The scaling did not occur at the right time.
2018-09-20 20:59:01 +02:00
sebcrozet b272f3ba76 Fix compilation errors when the serde-serialize feature is enabled.
Fix #369.
2018-09-13 07:49:38 +02:00
sebcrozet 378b39db9c Update impls of abomonation. 2018-07-20 16:33:59 +02:00