28 : lowerLeftCorner_m(
std::numeric_limits<double>::max()),
29 upperRightCorner_m(
std::numeric_limits<double>::lowest()) {}
41 for (
unsigned int d = 0; d < 3; ++d) {
48 for (
unsigned int d = 0; d < 3; ++d) {
56 std::optional<Vector_t<double, 3>> result = std::nullopt;
57 double minDistance = std::numeric_limits<double>::max();
61 for (
unsigned int d = 0; d < 3; ++d) {
72 if (tau < 0.0)
continue;
78 for (
unsigned int i = 1; i < 3; ++i) {
79 unsigned int idx = (d + i) % 3;
80 if (relativeP[idx] < 0 || relativeP[idx] > dimensions[idx]) {
89 if (distance < minDistance) {
90 minDistance = distance;
91 result = pointOnPlane;
106 for (
unsigned int d = 0; d < 3; ++d) {
107 if (relPosition[d] < 0 || relPosition[d] > dimensions[d])
return false;
113 int prePrecision = output.precision();
114 output << std::setprecision(8);
115 output <<
"Bounding box\n"
118 output.precision(prePrecision);
ippl::Vector< T, Dim > Vector_t
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.
KOKKOS_INLINE_FUNCTION double euclidean_norm(const Vector_t< T, D > &v)
void print(std::ostream &output) const
Vector_t< double, 3 > lowerLeftCorner_m
Vector_t< double, 3 > upperRightCorner_m
bool isInside(const Vector_t< double, 3 > &position) const
void enlargeToContainPosition(const Vector_t< double, 3 > &position)
std::optional< Vector_t< double, 3 > > getIntersectionPoint(const Vector_t< double, 3 > &position, const Vector_t< double, 3 > &direction) const
static BoundingBox getBoundingBox(const std::vector< Vector_t< double, 3 > > &positions)
void enlargeToContainBoundingBox(const BoundingBox &boundingBox)