template struct Point { Doub x[DIM]; Point(const Point &p) { for (Int i=0; i 1) x[1] = x1; if (DIM > 2) x[2] = x2; if (DIM > 3) throw("Point not implemented for DIM > 3"); } }; template struct Box { Point lo, hi; Box() {} Box(const Point &mylo, const Point &myhi) : lo(mylo), hi(myhi) {} }; template Doub dist(const Point &p, const Point &q) { Doub dd = 0.0; for (Int j=0; j Doub dist(const Box &b, const Point &p) { Doub dd = 0; for (Int i=0; ib.hi.x[i]) dd += SQR(p.x[i]-b.hi.x[i]); } return sqrt(dd); }