code: public static double orientationMetric(Point3d[] a, Point3d[] b) {
  
  		Quat4d qa = orientation(a);
  		Quat4d qb = orientation(b);
  
  		return orientationMetric(qa, qb);
  	}
docs: The orientation metric is obtained by comparing the quaternion
  orientations of the principal axes of each set of points in 3D.
  <p>
  First, the quaternion orientation of each set of points is calculated
  using their principal axes with {@link #orientation(Point3d[])}. Then,
  the two quaternions are compared using the method
  {@link #orientationMetric(Quat4d, Quat4d)}.
  <p>
  A requisite for this method to work properly is that both sets of points
  have to define the same shape (or very low RMSD), otherwise some of the
  principal axes might change or be inverted, resulting in an unreliable
  metric. For shapes with some deviations in their shape, use the metric
  {@link #orientationAngle(Point3d[], Point3d[])}.
  
  @param a
  array of Point3d
  @param b
  array of Point3d
  @return the quaternion orientation metric