float SquaredDistancePointSolidBox (Box box, Point P) { D = P - box.C; sqrDist = 0; for (i = 0; i <= 2; i++) { s[i] = Dot(box.U[i],D); if ( s[i] < -box.e[i] ) { delta = s[i] + box.e[i]; sqrDist += delta*delta; s[i] = -box.e[i]; // include only if you want closest point } else if ( s[i] > box.e[i] ) { delta = s[i] - box.e[i]; sqrDist += delta*delta; s[i] = box.e[i]; // include only if you want closest point } } // closest point is C + sum_{i=0}^2 s[i]*box.U[i] return sqrDist; }