+ return sqrt (sqr (coordinate_a_[X_AXIS])
+ + sqr (coordinate_a_[Y_AXIS]));
+}
+
+bool
+Offset::is_sane () const
+{
+ return !isnan (coordinate_a_[X_AXIS])
+ && !isnan (coordinate_a_ [Y_AXIS])
+ && !isinf (coordinate_a_[X_AXIS])
+ && !isinf (coordinate_a_[Y_AXIS]);
+}
+
+Offset
+Offset::direction () const
+{
+ Offset d = *this;
+ d /= length ();
+ return d;
+}
+
+Offset
+Offset::swapped () const
+{
+ return Offset (coordinate_a_[Y_AXIS], coordinate_a_[X_AXIS]);