Rec CombineRec(const Rec &rc1, const Rec &rc2) { if (!rc1.is_valid()) return rc2; if (!rc2.is_valid()) return rc1; Rec ret; for (int i = 0; i < DIMENSION; i++) { ret.bound[i] = std::min(rc1.bound[i], rc2.bound[i]); } for (int i = DIMENSION; i < 2 * DIMENSION; i++) { ret.bound[i] = std::max(rc1.bound[i], rc2.bound[i]); } return ret; }
double RecArea(const Rec &mbr) { if (!mbr.is_valid()) return 0; static const double xpi = vratio(DIMENSION); double ret = 0; double sumr = 0; for (int i = 0; i < DIMENSION; i++) { double len = (mbr.bound[i + DIMENSION] - mbr.bound[i]) / 2; sumr += len * len; } double radius = sqrt(sumr); ret = pow(radius, DIMENSION) * xpi; return ret; }