//
import java.util.*;

public class SimpleRayTracer extends PixApplet
{
   Vector shapes = new Vector();

   public void init() {
      super.init();
      shapes.addElement(new Sphere( .07,.06,-2,.07));
      shapes.addElement(new Sphere(-.07,.06,-2,.07));
      shapes.addElement(new Sphere(0,0,-2.02,.1));
   }

   public void setPix(int frame) {
      double focal_length = 3.5;        // FOCAL LENGTH OF "LENS"
      double v[] = {0,0,0};             // VIEW POINT
      double w[] = {0,0,-focal_length}; // RAY DIRECTION
      double t[] = new double[2];       // PLACE TO STORE ROOTS
      double p[] = {0,0,0};             // SURFACE POINT
      double n[] = {0,0,0};             // SURFACE NORMAL

      // LOOP THROUGH PIXELS OF IMAGE

      for (int row = 0 ; row < H ; row++)
      for (int col = 0 ; col < W ; col++) {

         // CONSTRUCT RAY DIRECTION VECTOR

	 w[0] =  col / (double)W - 0.5;
	 w[1] = -row / (double)W + 0.5 * H / W;

	 // LOOP THROUGH ALL SHAPES

         Shape nearest_s = null;
	 double nearest_t = 1000000;
         for (int i = 0 ; i < shapes.size() ; i++) {
	    Shape s = (Shape)shapes.elementAt(i);
	    if (s.traceRay(v,w,t)>0 && t[0]>0 && t[0]