code: private void init(Matrix rotation, Atom translation) {
  		if(rotation.getColumnDimension() != 3 || rotation.getRowDimension() != 3) {
  			throw new IllegalArgumentException("Expected 3x3 rotation matrix");
  		}
  
  
  		// Calculate angle
  		double c = (rotation.trace()-1)/2.0; //=cos(theta)
  		// c is sometimes slightly out of the [-1,1] range due to numerical instabilities
  		if( -1-1e-8 < c && c < -1 ) c = -1;
  		if( 1+1e-8 > c && c > 1 ) c = 1;
  		if( -1 > c || c > 1 ) {
  			throw new IllegalArgumentException("Input matrix is not a valid rotation matrix.");
  		}
  		this.theta = Math.acos(c);
  
  		if(theta < MIN_ANGLE) {
  			calculateTranslationalAxis(rotation,translation);
  		} else {
  			calculateRotationalAxis(rotation, translation, c);
  		}
  	}
docs: Initialize variables
  
  @param rotation
  @param translation