public double[] toEulerAngles(){
  double[] ret=new double[3];
  ret[0]=Math.atan2(2 * points[1] * getW() - 2 * points[0] * points[2],1 - 2 * (points[1] * points[1]) - 2 * (points[2] * points[2]));
  ret[1]=Math.asin(2 * points[0] * points[1] + 2 * points[2] * getW());
  ret[2]=Math.atan2(2 * points[0] * getW() - 2 * points[1] * points[2],1 - 2 * (points[0] * points[0]) - 2 * (points[2] * points[2]));
  return ret;
}

public double [ ] toEulerAngles ( ) { double [ ] ret = new double [ 3 ] ; ret [ 0 ] = Math . atan2 ( 2 * points [ 1 ] * getW ( ) - 2 * points [ 0 ] * points [ 2 ] , 1 - 2 * ( points [ 1 ] * points [ 1 ] ) - 2 * ( points [ 2 ] * points [ 2 ] ) ) ; ret [ 1 ] = Math . asin ( 2 * points [ 0 ] * points [ 1 ] + 2 * points [ 2 ] * getW ( ) ) ; ret [ 2 ] = Math . atan2 ( 2 * points [ 0 ] * getW ( ) - 2 * points [ 1 ] * points [ 2 ] , 1 - 2 * ( points [ 0 ] * points [ 0 ] ) - 2 * ( points [ 2 ] * points [ 2 ] ) ) ; return ret ; }
returns the heading , attitude and bank of this quaternion as euler angles in the double array respectively
