content: package edu.stanford.rsl.conrad.rendering;
  
  import java.util.ArrayList;
  
  import edu.stanford.rsl.conrad.geometry.AbstractCurve;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.ProjectPointToLineComparator;
  import edu.stanford.rsl.conrad.geometry.shapes.simple.LineComparator1D;
  import edu.stanford.rsl.conrad.physics.PhysicalObject;
  import edu.stanford.rsl.conrad.physics.PhysicalPoint;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  
  public class Simple1DRayTracer extends SimpleRayTracer {
  
  	public Simple1DRayTracer () {
  		comparator = new LineComparator1D();
  	}
  	
  	@Override
  	protected ArrayList<PhysicalPoint> intersectWithScene(AbstractCurve ray){
  		ArrayList<PhysicalPoint> rayList = new ArrayList<PhysicalPoint>();
  		// compute ray intersections:
  		for (PhysicalObject shape: scene) {
  			if (shape.getShape() == null){
  				throw new RuntimeException("Shape " + shape + " did not contain geometric information!");
  			}
  			if (shape.getShape().getHitsOnBoundingBox(ray).size()>0) {
  				ArrayList<PointND> intersection = shape.intersect(ray);
  				if (intersection.size() > 0){ 
  					for (PointND p : intersection){
  						PhysicalPoint point = new PhysicalPoint(p.get(0));
  						point.setObject(shape);
  						rayList.add(point);
  					}
  					if(intersection.size() == 1) {
  						PhysicalPoint point = new PhysicalPoint(intersection.get(0).get(0)+CONRAD.SMALL_VALUE);
  						point.setObject(shape);
  						rayList.add(point);
  					}
  					if(intersection.size() == 3) {
  						PhysicalPoint point = new PhysicalPoint(intersection.get(0).get(0)+CONRAD.SMALL_VALUE);
  						point.setObject(shape);
  						rayList.add(point);
  					}
  				}
  			}
  		}
  		return rayList;
  	}
  
  
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */