`#include <MT_ExpMap.h>`

Basic overview of why this class is used. In an IK system we need to paramterize the joint angles in some way. Typically 2 parameterizations are used.

- Euler Angles These suffer from singularities in the parameterization known as gimbal lock. They also do not interpolate well. For every set of euler angles there is exactly 1 corresponding 3d rotation.
- Quaternions. Great for interpolating. Only unit quaternions are valid rotations means that in a differential ik solver we often stray outside of this manifold into invalid rotations. Means we have to do a lot of nasty normalizations all the time. Does not suffer from gimbal lock problems. More expensive to compute partial derivatives as there are 4 of them.

So exponential map is similar to a quaternion axis/angle representation but we store the angle as the length of the axis. So require only 3 parameters. Means that all exponential maps are valid rotations. Suffers from gimbal lock. But it's possible to detect when gimbal lock is near and reparameterize away from it. Also nice for interpolating. Exponential maps are share some of the useful properties of euler and quaternion parameterizations. And are very useful for differential IK solvers.

Definition at line 76 of file MT_ExpMap.h.

## Public Member Functions | |

MT_Matrix3x3 | getMatrix () const |

const MT_Quaternion & | getRotation () const |

MT_ExpMap (const MT_Quaternion &q) | |

MT_ExpMap (MT_Scalar x, MT_Scalar y, MT_Scalar z) | |

MT_ExpMap (const double v[3]) | |

MT_ExpMap (const float v[3]) | |

MT_ExpMap (const MT_Vector3 &v) | |

MT_ExpMap () | |

void | partialDerivatives (MT_Matrix3x3 &dRdx, MT_Matrix3x3 &dRdy, MT_Matrix3x3 &dRdz) const |

void | setRotation (const MT_Quaternion &q) |

void | update (const MT_Vector3 &dv) |

const MT_Vector3 & | vector () const |

## Private Member Functions | |

void | angleUpdated () |

void | compute_dQdVi (MT_Quaternion *dQdX) const |

void | compute_dRdVi (const MT_Quaternion &dQdV, MT_Matrix3x3 &dRdVi) const |

void | reParametrize () |

## Private Attributes | |

MT_Quaternion | m_q |

MT_Scalar | m_sinp |

MT_Scalar | m_theta |

MT_Vector3 | m_v |

The documentation for this class was generated from the following files:

- blender-2.46.orig/intern/iksolver/intern/MT_ExpMap.h
- blender-2.46.orig/intern/iksolver/intern/MT_ExpMap.cpp

Generated by Doxygen 1.6.0 Back to index