public static Color trace(Ray r) {
   Point pt = null;
   Point nPt;
   ObjectR oInter = null;
   double minDist = Double.MAX_VALUE;
   for (ObjectR o : ObjectR.objects) {
     nPt = o.intersect(r);
     double dist = calc.distance(nPt.coord, cam.point.coord);
     if (dist < minDist) {
       pt = nPt;
       minDist = dist;
       oInter = o;
     }
   }
   if (pt != null) {
     // Find Light source
     for (Light s : Light.lights) {
       Ray shadow = new Ray(pt.coord, s.dim);
       for (ObjectR oShadow : ObjectR.objects) {
         if (!Light.lights.contains(oShadow) && oShadow.intersect(shadow) != null) {
           if (oShadow == oInter) {
             return shade(oInter, pt, s, cam);
           } else {
             return black;
           }
         }
       }
       return shade(oInter, pt, s, cam);
     }
   }
   return background;
 }