[][src]Struct cv_core::Skew3

pub struct Skew3(pub Vector3<f64>);

Contains a member of the lie algebra so(3), a representation of the tangent space of 3d rotation. This is also known as the lie algebra of the 3d rotation group SO(3).

This is only intended to be used in optimization problems where it is desirable to have unconstranied variables representing the degrees of freedom of the rotation. In all other cases, a rotation matrix should be used to store rotations, since the conversion to and from a rotation matrix is non-trivial.

Implementations

impl Skew3[src]

pub fn rotation(self) -> Rotation3<f64>[src]

Converts the Skew3 to a Rotation3 matrix.

pub fn vee(mat: Matrix3<f64>) -> Self[src]

This converts a matrix in skew-symmetric form into a Skew3.

Warning: Does no check to ensure matrix is actually skew-symmetric.

pub fn hat(self) -> Matrix3<f64>[src]

This converts the Skew3 into its skew-symmetric matrix form.

pub fn hat2(self) -> Matrix3<f64>[src]

This converts the Skew3 into its squared skew-symmetric matrix form efficiently.

pub fn bracket(self, rhs: Self) -> Self[src]

Computes the lie bracket [self, rhs].

pub fn jacobian_input(self) -> Matrix4<f64>[src]

The jacobian of the output of a rotation in respect to the input of a rotation.

y = R * x

dy/dx = R

The formula is pretty simple and is just the rotation matrix created from the exponential map of this so(3) element into SO(3). The result is converted to homogeneous form (by adding a new dimension with a 1 in the diagonal) so that it is compatible with homogeneous coordinates.

If you have the rotation matrix already, please use the rotation matrix itself rather than calling this method. Calling this method will waste time converting the Skew3 back into a Rotation3, which is non-trivial.

pub fn jacobian_self(y: Vector3<f64>) -> Matrix3<f64>[src]

The jacobian of the output of a rotation in respect to the rotation itself.

y = R * x

dy/dR = -hat(y)

The derivative is purely based on the current output vector, and thus doesn't take self.

Note that when working with homogeneous projective coordinates, only the first three components (the bearing) are relevant, hence the resulting matrix is a Matrix3.

Trait Implementations

impl AsMut<Matrix<f64, U3, U1, <DefaultAllocator as Allocator<f64, U3, U1>>::Buffer>> for Skew3[src]

impl AsRef<Matrix<f64, U3, U1, <DefaultAllocator as Allocator<f64, U3, U1>>::Buffer>> for Skew3[src]

impl Clone for Skew3[src]

impl Copy for Skew3[src]

impl Debug for Skew3[src]

impl Deref for Skew3[src]

type Target = Vector3<f64>

The resulting type after dereferencing.

impl DerefMut for Skew3[src]

impl From<Matrix<f64, U3, U1, <DefaultAllocator as Allocator<f64, U3, U1>>::Buffer>> for Skew3[src]

impl From<Rotation<f64, U3>> for Skew3[src]

This is the log map.

impl From<Skew3> for Vector3<f64>[src]

impl From<Skew3> for Rotation3<f64>[src]

This is the exponential map.

impl PartialEq<Skew3> for Skew3[src]

impl PartialOrd<Skew3> for Skew3[src]

impl StructuralPartialEq for Skew3[src]

Auto Trait Implementations

impl Send for Skew3

impl Sync for Skew3

impl Unpin for Skew3

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> Scalar for T where
    T: PartialEq<T> + Copy + Any + Debug
[src]

impl<SS, SP> SupersetOf<SS> for SP where
    SS: SubsetOf<SP>, 

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,