content: package edu.stanford.rsl.conrad.geometry.bounds;
  
  import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.QuadricSurface;
  
  /**
   * This class describes the bounds defined by a {@link QuadricSurface}. This class is useful when a quadric shape describes the extremum of an arbitrary shape
   * @author Rotimi X Ojo
   * @see QuadricSurface
   */
  public class QuadricBoundingCondition extends AbstractBoundingCondition{
  
  
  	public static final long serialVersionUID = -3212222341769199451L;
  
  	private QuadricSurface surface;
  
  	private boolean isFlipped = false;
  
  	/**
  	 * Initialize bounding condition defiend by {@link QuadricSurface}.
  	 * @param surface is {@link QuadricSurface} describing the extremum of an arbitrary shape.
  	 */
  	public QuadricBoundingCondition(QuadricSurface surface){
  		this.surface = surface;
  	}
  	
  	public QuadricBoundingCondition(QuadricBoundingCondition qbc){
  		super(qbc);
  		surface = (qbc.surface != null) ? (QuadricSurface) qbc.surface.clone() : null;
  		isFlipped = qbc.isFlipped;
  	}
  
  	@Override
  	public boolean isSatisfiedBy(PointND point) {
  		boolean val = surface.isMember(point);
  		if(isFlipped){
  			return val == true? false: true;
  		}			
  		return val;
  	}
  
  	@Override
  	public QuadricSurface getBoundingSurface() {
  		return surface;
  	}
  
  	@Override
  	public void flipCondition() {
  		isFlipped = isFlipped==true ? false:true;		
  	}
  
  	@Override
  	public AbstractBoundingCondition clone() {
  		return new QuadricBoundingCondition(this);
  	}
  
  }
  /*
   * Copyright (C) 2010 - Rotimi X Ojo 
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
   */