diff --git a/dune/gfe/rigidbodymotion.hh b/dune/gfe/rigidbodymotion.hh index 124347ed12008bdc4c81b10da08b65d0cb7dc341..f7ce7f78d91da5965e1e19015abb8bdf59247c5f 100644 --- a/dune/gfe/rigidbodymotion.hh +++ b/dune/gfe/rigidbodymotion.hh @@ -38,6 +38,16 @@ struct RigidBodyMotion return result; } + /** \brief Compute geodesic distance from a to b */ + static T distance(const RigidBodyMotion<dim,ctype>& a, const RigidBodyMotion<dim,ctype>& b) { + + T euclideanDistanceSquared = (a.r - b.r).two_norm2(); + + T rotationDistance = Rotation<dim,ctype>::distance(a.q, b.q); + + return std::sqrt(euclideanDistanceSquared + rotationDistance*rotationDistance); + } + /** \brief Compute difference vector from a to b on the tangent space of a */ static TangentVector difference(const RigidBodyMotion<dim,ctype>& a, const RigidBodyMotion<dim,ctype>& b) {