content: package edu.stanford.rsl.conrad.geometry.shapes.simple;
  
  import java.util.Comparator;
  
  import edu.stanford.rsl.conrad.numerics.SimpleOperators;
  import edu.stanford.rsl.conrad.numerics.SimpleVector;
  import edu.stanford.rsl.conrad.physics.PhysicalPoint;
  
  public class ProjectPointToLineComparator implements Comparator<PhysicalPoint>, Cloneable{
  
  	protected StraightLine projectionLine = null;
  	
  	public ProjectPointToLineComparator() {
  	}
  	
  	@Override
  	public int compare(PhysicalPoint vec1, PhysicalPoint vec2) {
  		SimpleVector dir = projectionLine.getDirection();
  		return Double.compare(SimpleOperators.multiplyInnerProd(dir, vec1.getAbstractVector()),SimpleOperators.multiplyInnerProd(dir, vec2.getAbstractVector()));
  	}
  
  	/**
  	 * @return the projectionLine
  	 */
  	public StraightLine getProjectionLine() {
  		return projectionLine;
  	}
  
  	/**
  	 * @param projectionLine the projectionLine to set
  	 */
  	public void setProjectionLine(StraightLine projectionLine) {
  		this.projectionLine = projectionLine;
  	}
  	
  	@Override
  	public ProjectPointToLineComparator clone(){
  		ProjectPointToLineComparator clone = new ProjectPointToLineComparator();
  		clone.setProjectionLine(projectionLine);
  		return clone;
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Martin Berger
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
   */