docs: public void set( Matrix4f m ) {
  		float s;
  		int i;
  
  		float tr = m.m00 + m.m11 + m.m22;
  
  		if (tr > 0.0) {
  			s = (float)Math.sqrt(tr + 1.0f);
  			w = s / 2.0f;
  			s = 0.5f / s;
  			x = (m.m12 - m.m21) * s;
  			y = (m.m20 - m.m02) * s;
  			z = (m.m01 - m.m10) * s;
  		} else {		
  			i = 0;
  			if ( m.m11 > m.m00 ) {
  				i = 1;
  				if ( m.m22 > m.m11 ) {
  					i = 2;
  				} else {
  				}
  			} else {
  				if ( m.m22 > m.m00 ) {
  					i = 2;
  				} else {
  				}
  			}
  
  			switch ( i ) {
  			case 0:
  				s = (float)Math.sqrt ((m.m00 - (m.m11 + m.m22)) + 1.0f);
  				x = s * 0.5f;
  				if (s != 0.0)
  					s = 0.5f / s;
  				w = (m.m12 - m.m21) * s;
  				y = (m.m01 + m.m10) * s;
  				z = (m.m02 + m.m20) * s;
  				break;
  			case 1:
  				s = (float)Math.sqrt ((m.m11 - (m.m22 + m.m00)) + 1.0f);
  				y = s * 0.5f;
  				if (s != 0.0)
  					s = 0.5f / s;
  				w = (m.m20 - m.m02) * s;
  				z = (m.m12 + m.m21) * s;
  				x = (m.m10 + m.m01) * s;
  				break;
  			case 2:
  				s = (float)Math.sqrt ((m.m00 - (m.m11 + m.m22)) + 1.0f);
  				z = s * 0.5f;
  				if (s != 0.0)
  					s = 0.5f / s;
  				w = (m.m01 - m.m10) * s;
  				x = (m.m20 + m.m02) * s;
  				y = (m.m21 + m.m12) * s;
  				break;
  			}
  
  		}
  	}