Add 3d cross-product matrix construction from a vector.
This commit is contained in:
parent
3dc76caf7e
commit
5c28af3a53
|
@ -23,6 +23,9 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
* `UnitQuaternion::scaled_rotation_between_axis` and
|
* `UnitQuaternion::scaled_rotation_between_axis` and
|
||||||
`UnitQuaternion::rotation_between_axis` that take Unit vectors instead of
|
`UnitQuaternion::rotation_between_axis` that take Unit vectors instead of
|
||||||
Vector as arguments.
|
Vector as arguments.
|
||||||
|
* `.cross_matrix()` returns the cross-product matrix of a given vector, i.e.,
|
||||||
|
the matrix `M` such that for all vector `v` we have `M * v ==
|
||||||
|
self.cross(&v)`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@ use abomonation::Abomonation;
|
||||||
|
|
||||||
use alga::general::{Ring, Real};
|
use alga::general::{Ring, Real};
|
||||||
|
|
||||||
use core::{Scalar, DefaultAllocator, Unit, VectorN, MatrixMN};
|
use core::{Scalar, DefaultAllocator, Unit, VectorN, MatrixN, MatrixMN};
|
||||||
use core::dimension::{Dim, DimAdd, DimSum, U1, U2};
|
use core::dimension::{Dim, DimAdd, DimSum, U1, U2, U3};
|
||||||
use core::constraint::{ShapeConstraint, SameNumberOfRows, SameNumberOfColumns, DimEq};
|
use core::constraint::{ShapeConstraint, SameNumberOfRows, SameNumberOfColumns, DimEq};
|
||||||
use core::iter::{MatrixIter, MatrixIterMut};
|
use core::iter::{MatrixIter, MatrixIterMut};
|
||||||
use core::allocator::{Allocator, SameShapeAllocator, SameShapeR, SameShapeC};
|
use core::allocator::{Allocator, SameShapeAllocator, SameShapeR, SameShapeC};
|
||||||
|
@ -895,6 +895,17 @@ impl<N: Scalar + Ring, R: Dim, C: Dim, S: Storage<N, R, C>> Matrix<N, R, C, S> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N: Real, S: Storage<N, U3>> Vector<N, U3, S>
|
||||||
|
where DefaultAllocator: Allocator<N, U3> {
|
||||||
|
/// Computes the matrix `M` such that for all vector `v` we have `M * v == self.cross(&v)`.
|
||||||
|
#[inline]
|
||||||
|
pub fn cross_matrix(&self) -> MatrixN<N, U3> {
|
||||||
|
MatrixN::<N, U3>::new(N::zero(), -self[2], self[1],
|
||||||
|
self[2], N::zero(), -self[0],
|
||||||
|
-self[1], self[0], N::zero())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<N: Real, R: Dim, C: Dim, S: Storage<N, R, C>> Matrix<N, R, C, S> {
|
impl<N: Real, R: Dim, C: Dim, S: Storage<N, R, C>> Matrix<N, R, C, S> {
|
||||||
/// The smallest angle between two vectors.
|
/// The smallest angle between two vectors.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
Loading…
Reference in New Issue