Пример #1
0
bool AxisAlignedBox::Intersects(const AxisAlignedBox& other) const {
  if (!Valid() || !other.Valid()) {
    throw std::invalid_argument("Can't check intersection with an invalid bounding box");
  }
  return !(max_.x() < other.min_.x() || min_.x() > other.max_.x() ||
           max_.y() < other.min_.x() || min_.x() > other.max_.x() ||
           max_.z() < other.min_.z() || min_.z() > other.max_.z());
}
Пример #2
0
AxisAlignedBox AxisAlignedBox::Intersection(const AxisAlignedBox& other) const {
  if (!Valid() || !other.Valid()) {
    return AxisAlignedBox();
  }
  double x0;
  double x1;
  double y0;
  double y1;
  double z0;
  double z1;
  if (!Isect1d(min_.x(), max_.x(), other.min_.x(), other.max_.x(), &x0, &x1)) {
    return AxisAlignedBox();
  }
  if (!Isect1d(min_.y(), max_.y(), other.min_.y(), other.max_.y(), &y0, &y1)) {
    return AxisAlignedBox();
  }
  if (!Isect1d(min_.z(), max_.z(), other.min_.z(), other.max_.z(), &z0, &z1)) {
    return AxisAlignedBox();
  }
  return AxisAlignedBox(QVector3D(x0, y0, z0), QVector3D(x1, y1, z1));
}