Simbody  3.5
SimTK::InverseRotation_< P > Class Template Reference

(Advanced) This InverseRotation class is the inverse of a Rotation. More...

+ Inheritance diagram for SimTK::InverseRotation_< P >:

List of all members.

Public Types

typedef Mat< 3, 3, P >
::TransposeType 
BaseMat
 This is the type of the underlying 3x3 matrix; note that it will have unusual row and column spacing since we're viewing it as transposed.
typedef UnitVec< P,
BaseMat::RowSpacing > 
ColType
 Note that the unit vectors representing the rows and columns of this matrix do not necessarily have unit stride.
typedef UnitRow< P,
BaseMat::ColSpacing > 
RowType
 This is the type of a row of this InverseRotation.

Public Member Functions

 InverseRotation_ ()
 You should not ever construct one of these as they should only occur as expression intermediates resulting from use of the "~" operator on a Rotation.
 InverseRotation_ (const InverseRotation_ &R)
 An explicit implementation of the default copy constructor.
InverseRotation_operator= (const InverseRotation_ &R)
 An explicit implementation of the default copy assignment operator.
SymMat33P reexpressSymMat33 (const SymMat33P &S_BB) const
 Assuming this InverseRotation_ is R_AB, and given a symmetric dyadic matrix S_BB expressed in B, we can reexpress it in A using S_AA=R_AB*S_BB*R_BA.
const ColTypegetAxisUnitVec (CoordinateAxis axis) const
 Given a CoordinateAxis (XAxis,YAxis, or ZAxis) return a reference to the corresponding column of this InverseRotation matrix.
const UnitVec< P, 1 > getAxisUnitVec (CoordinateDirection dir) const
 Given a CoordinateDirection (+/-XAxis, etc.) return a unit vector in that direction.
const RotationPinvert () const
 We can invert an InverseRotation just by recasting it to a Rotation at zero cost.
RotationPupdInvert ()
 We can invert an InverseRotation just by recasting it to a Rotation at zero cost.
const RotationPtranspose () const
 Transpose, and transpose operators (override BaseMat versions of transpose).
const RotationPoperator~ () const
 Transpose, and transpose operators (override BaseMat versions of transpose).
RotationPupdTranspose ()
 Transpose, and transpose operators (override BaseMat versions of transpose).
RotationPoperator~ ()
 Transpose, and transpose operators (override BaseMat versions of transpose).
const RowTyperow (int i) const
 Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.
const RowTypeoperator[] (int i) const
 Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.
const ColTypecol (int j) const
 Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.
const ColTypeoperator() (int j) const
 Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.
const ColTypex () const
 Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.
const ColTypey () const
 Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.
const ColTypez () const
 Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.
const BaseMatasMat33 () const
 Conversion from InverseRotation_ to BaseMat.
BaseMat toMat33 () const
 Conversion from InverseRotation_ to BaseMat.

Detailed Description

template<class P>
class SimTK::InverseRotation_< P >

(Advanced) This InverseRotation class is the inverse of a Rotation.

See the Rotation class for more information.


Member Typedef Documentation

template<class P>
typedef Mat<3,3,P>::TransposeType SimTK::InverseRotation_< P >::BaseMat

This is the type of the underlying 3x3 matrix; note that it will have unusual row and column spacing since we're viewing it as transposed.

template<class P>
typedef UnitVec<P,BaseMat::RowSpacing> SimTK::InverseRotation_< P >::ColType

Note that the unit vectors representing the rows and columns of this matrix do not necessarily have unit stride.

This is the type of a column of this InverseRotation.

template<class P>
typedef UnitRow<P,BaseMat::ColSpacing> SimTK::InverseRotation_< P >::RowType

This is the type of a row of this InverseRotation.


Constructor & Destructor Documentation

template<class P>
SimTK::InverseRotation_< P >::InverseRotation_ ( ) [inline]

You should not ever construct one of these as they should only occur as expression intermediates resulting from use of the "~" operator on a Rotation.

But if you must, the default will produce an identity rotation.

template<class P>
SimTK::InverseRotation_< P >::InverseRotation_ ( const InverseRotation_< P > &  R) [inline]

An explicit implementation of the default copy constructor.


Member Function Documentation

template<class P>
InverseRotation_& SimTK::InverseRotation_< P >::operator= ( const InverseRotation_< P > &  R) [inline]

An explicit implementation of the default copy assignment operator.

template<class P>
SymMat33P SimTK::InverseRotation_< P >::reexpressSymMat33 ( const SymMat33P S_BB) const

Assuming this InverseRotation_ is R_AB, and given a symmetric dyadic matrix S_BB expressed in B, we can reexpress it in A using S_AA=R_AB*S_BB*R_BA.

The matrix should be one that is formed as products of vectors expressed in A, such as inertia, unit inertia (gyration) or covariance matrices. This can be done efficiently exploiting properties of R and S. Cost is 57 flops.

See also:
Rotation::reexpressSymMat33()
template<class P>
const RotationP& SimTK::InverseRotation_< P >::invert ( ) const [inline]

We can invert an InverseRotation just by recasting it to a Rotation at zero cost.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
RotationP& SimTK::InverseRotation_< P >::updInvert ( ) [inline]

We can invert an InverseRotation just by recasting it to a Rotation at zero cost.

template<class P>
const RotationP& SimTK::InverseRotation_< P >::transpose ( ) const [inline]

Transpose, and transpose operators (override BaseMat versions of transpose).

For an orthogonal matrix like this one transpose is the same as inverse.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
const RotationP& SimTK::InverseRotation_< P >::operator~ ( ) const [inline]

Transpose, and transpose operators (override BaseMat versions of transpose).

For an orthogonal matrix like this one transpose is the same as inverse.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
RotationP& SimTK::InverseRotation_< P >::updTranspose ( ) [inline]

Transpose, and transpose operators (override BaseMat versions of transpose).

For an orthogonal matrix like this one transpose is the same as inverse.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
RotationP& SimTK::InverseRotation_< P >::operator~ ( ) [inline]

Transpose, and transpose operators (override BaseMat versions of transpose).

For an orthogonal matrix like this one transpose is the same as inverse.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
const RowType& SimTK::InverseRotation_< P >::row ( int  i) const [inline]

Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.

There are no writable versions of these methods since changing a single row or column would violate the contract that these are always legitimate rotation matrices.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
const RowType& SimTK::InverseRotation_< P >::operator[] ( int  i) const [inline]

Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.

There are no writable versions of these methods since changing a single row or column would violate the contract that these are always legitimate rotation matrices.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
const ColType& SimTK::InverseRotation_< P >::col ( int  j) const [inline]

Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.

There are no writable versions of these methods since changing a single row or column would violate the contract that these are always legitimate rotation matrices.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
const ColType& SimTK::InverseRotation_< P >::operator() ( int  j) const [inline]

Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.

There are no writable versions of these methods since changing a single row or column would violate the contract that these are always legitimate rotation matrices.

Reimplemented from SimTK::Mat< M, N, ELT, CS, RS >.

template<class P>
const ColType& SimTK::InverseRotation_< P >::x ( ) const [inline]

Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.

There are no writable versions of these methods since changing a single row or column would violate the contract that these are always legitimate rotation matrices.

template<class P>
const ColType& SimTK::InverseRotation_< P >::y ( ) const [inline]

Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.

There are no writable versions of these methods since changing a single row or column would violate the contract that these are always legitimate rotation matrices.

template<class P>
const ColType& SimTK::InverseRotation_< P >::z ( ) const [inline]

Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned.

There are no writable versions of these methods since changing a single row or column would violate the contract that these are always legitimate rotation matrices.

template<class P>
const ColType& SimTK::InverseRotation_< P >::getAxisUnitVec ( CoordinateAxis  axis) const [inline]

Given a CoordinateAxis (XAxis,YAxis, or ZAxis) return a reference to the corresponding column of this InverseRotation matrix.

The result is equivalent to multiplying R_AB*v_B where v_B is [1,0,0],[0,1,0], or [0,0,1], which would cost 15 flops, but requires no computation.

template<class P>
const UnitVec<P,1> SimTK::InverseRotation_< P >::getAxisUnitVec ( CoordinateDirection  dir) const [inline]

Given a CoordinateDirection (+/-XAxis, etc.) return a unit vector in that direction.

The result is equivalent to multiplying R_AB*v_B where v_B is [+/-1,0,0], [0,+/-1,0], or [0,0,+/-1], which would cost 15 flops, but this method requires at most 3 flops.

template<class P>
const BaseMat& SimTK::InverseRotation_< P >::asMat33 ( ) const [inline]

Conversion from InverseRotation_ to BaseMat.

Note: asMat33 is slightly more efficient than toMat33() (no copy), but you have to know the internal layout.

template<class P>
BaseMat SimTK::InverseRotation_< P >::toMat33 ( ) const [inline]

Conversion from InverseRotation_ to BaseMat.

Note: asMat33 is slightly more efficient than toMat33() (no copy), but you have to know the internal layout.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines