54 template <
typename T,
int N>
struct bbox {
68 : bmin(vector_t::Constant(std::numeric_limits<T>::max())),
69 bmax(vector_t::Constant(-std::numeric_limits<T>::max())) {}
71 inline explicit bbox(
const vector_t &p)
72 :
bmin(p),
bmax(p + std::numeric_limits<T>::epsilon()) {}
74 inline bbox(
const vector_t &min,
const vector_t &max)
77 vector_t delta()
const {
return bmax -
bmin; }
78 const vector_t &min()
const {
return bmin; }
79 const vector_t &max()
const {
return bmax; }
85 for (
int i = 0; i < N; ++i) {
86 bmin[i] = std::min(bmin[i], arg.
bmin[i]);
87 bmax[i] = std::max(bmax[i], arg.
bmax[i]);
124 static_cast<T
>(0.5) *
125 ((bmax * (
static_cast<T
>(1) - arg) + bmin * (
static_cast<T
>(1) + arg)));
127 static_cast<T
>(0.5) *
128 ((bmax * (
static_cast<T
>(1) + arg) + bmin * (
static_cast<T
>(1) - arg)));
147 for (
int i = 0; i < N; ++i) {
148 within |= bmin[i] >= arg.
bmin[i];
149 within |= bmax[i] < arg.
bmax[i];
160 for (
int i = 0; i < N; ++i) {
161 within |= bmin[i] >= arg.
bmin[i];
162 within |= bmax[i] <= arg.
bmax[i];
171 for (
int i = 0; i < N; ++i) {
172 if (bmax[i] < bmin[i] + 3 * std::numeric_limits<double>::epsilon()) {
189 bool y_inv =
true)
const {
190 vector_t len_ratio = other.delta() / delta();
193 vector_t rel_pos = point -
bmin;
194 if (y_inv && N > 1) {
195 rel_pos[1] = bmax[1] - point[1];
198 return other.
bmin + rel_pos * len_ratio;
209 template <
typename T,
int N>
210 std::ostream &operator<<(std::ostream &out, const bbox<T, N> &b) {
211 return out <<
"bbox(" << b.bmin <<
"<->" << b.bmax <<
")";
Contains the minimum and maximum extents of a hypercube in D dimensional space.
Definition: BBox.hpp:54
vector_t bmin
minimum point in the box (i.e.
Definition: BBox.hpp:60
bbox operator+(const vector_t &arg)
Definition: BBox.hpp:113
bbox & operator+=(const bbox &arg)
Definition: BBox.hpp:84
bbox operator*(const vector_t &arg) const
Definition: BBox.hpp:135
bbox operator+(const bbox &arg)
Definition: BBox.hpp:95
bool is_empty()
Definition: BBox.hpp:170
bbox & operator*=(const vector_t &arg)
Definition: BBox.hpp:122
An N-dimensional vector class.
Definition: Vector.hpp:59
bool operator<(const bbox &arg)
Definition: BBox.hpp:144
vector_t bmax
maximum point in the box (i.e.
Definition: BBox.hpp:65
vector_t to_coords(const bbox< T, N > &other, vector_t point, bool y_inv=true) const
given two bboxes representing the same cube in space, convert from one coordinate system to another ...
Definition: BBox.hpp:188
bool operator<=(const bbox &arg)
Definition: BBox.hpp:157
Definition: Backend.cpp:39
bbox & operator+=(const vector_t &arg)
Definition: BBox.hpp:104