Simbody
3.5
|
(Advanced) This InverseRotation class is the inverse of a Rotation. More...
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 ColType & | getAxisUnitVec (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 RotationP & | invert () const |
We can invert an InverseRotation just by recasting it to a Rotation at zero cost. | |
RotationP & | updInvert () |
We can invert an InverseRotation just by recasting it to a Rotation at zero cost. | |
const RotationP & | transpose () const |
Transpose, and transpose operators (override BaseMat versions of transpose). | |
const RotationP & | operator~ () const |
Transpose, and transpose operators (override BaseMat versions of transpose). | |
RotationP & | updTranspose () |
Transpose, and transpose operators (override BaseMat versions of transpose). | |
RotationP & | operator~ () |
Transpose, and transpose operators (override BaseMat versions of transpose). | |
const RowType & | row (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 RowType & | operator[] (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 ColType & | col (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 ColType & | operator() (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 ColType & | x () const |
Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned. | |
const ColType & | y () const |
Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned. | |
const ColType & | z () const |
Access individual rows and columns of this InverseRotation; no cost or copying since suitably-cast references to the actual data are returned. | |
const BaseMat & | asMat33 () const |
Conversion from InverseRotation_ to BaseMat. | |
BaseMat | toMat33 () const |
Conversion from InverseRotation_ to BaseMat. |
(Advanced) This InverseRotation class is the inverse of a Rotation.
See the Rotation class for more information.
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.
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.
typedef UnitRow<P,BaseMat::ColSpacing> SimTK::InverseRotation_< P >::RowType |
This is the type of a row of this InverseRotation.
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.
SimTK::InverseRotation_< P >::InverseRotation_ | ( | const InverseRotation_< P > & | R | ) | [inline] |
An explicit implementation of the default copy constructor.
InverseRotation_& SimTK::InverseRotation_< P >::operator= | ( | const InverseRotation_< P > & | R | ) | [inline] |
An explicit implementation of the default copy assignment operator.
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.
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 >.
RotationP& SimTK::InverseRotation_< P >::updInvert | ( | ) | [inline] |
We can invert an InverseRotation just by recasting it to a Rotation at zero cost.
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 >.
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 >.
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 >.
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 >.
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 >.
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 >.
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 >.
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 >.
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.
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.
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.
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.
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.
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.
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.