template struct mrpt::math::TBoundingBox_

Overview

A bounding box defined by the 3D points at each minimum-maximum corner.

#include <mrpt/math/TBoundingBox.h>

template <typename T>
struct TBoundingBox_
{
    // enums

    enum CTOR_FLAGS;

    // fields

    mrpt::math::TPoint3D_<T> min;
    mrpt::math::TPoint3D_<T> max;

    // construction

    TBoundingBox_();
    TBoundingBox_(const mrpt::math::TPoint3D_<T>& Min, const mrpt::math::TPoint3D_<T>& Max, const CTOR_FLAGS f = CTOR_FLAGS::NoFlags);

    // methods

    T volume() const;

    std::optional<TBoundingBox_<T>> intersection(
        const TBoundingBox_<T>& b,
        const T epsilon = static_cast<T>(1e-4)
        ) const;

    TBoundingBox_<T> unionWith(const TBoundingBox_<T>& b) const;
    void updateWithPoint(const mrpt::math::TPoint3D_<T>& p);
    bool containsPoint(const mrpt::math::TPoint3D_<T>& p) const;

    template <typename POSE_T>
    TBoundingBox_<T> compose(const POSE_T& pose) const;

    template <typename POSE_T>
    TBoundingBox_<T> inverseCompose(const POSE_T& pose) const;

    std::string asString() const;
    bool operator == (const TBoundingBox_<T>& o) const;
    bool operator != (const TBoundingBox_<T>& o) const;
    static TBoundingBox_<T> PlusMinusInfinity();
    static TBoundingBox_<T> FromUnsortedPoints(const mrpt::math::TPoint3D_<T>& pt1, const mrpt::math::TPoint3D_<T>& pt2);
};

Fields

mrpt::math::TPoint3D_<T> min

The corners of the bounding box.

Construction

TBoundingBox_(const mrpt::math::TPoint3D_<T>& Min, const mrpt::math::TPoint3D_<T>& Max, const CTOR_FLAGS f = CTOR_FLAGS::NoFlags)

Ctor from min-max corners.

A bounding box may have a zero volume if max==min. It is ilegal for a coordinate of the max vector to be smaller than its min counterpart, in which case an exception will be thrown, except if the flag CTOR_FLAGS::AllowUnordered is passed.

Methods

T volume() const

Returns the volume of the box.

std::optional<TBoundingBox_<T>> intersection(
    const TBoundingBox_<T>& b,
    const T epsilon = static_cast<T>(1e-4)
    ) const

Returns the intersection of this bounding box with “b”, or std::nullopt if no intersection exists.

Note that borders are enlarged by “epsilon” before to testing for intersection to handle numerical innacuracies, for example on planar bounding boxes with a fixed “z”.

TBoundingBox_<T> unionWith(const TBoundingBox_<T>& b) const

Returns the union of this bounding box with “b”, i.e.

a new bounding box comprising both this and b

void updateWithPoint(const mrpt::math::TPoint3D_<T>& p)

Expands the box limits to include the given point.

bool containsPoint(const mrpt::math::TPoint3D_<T>& p) const

Returns true if the point lies within the bounding box (including the exact border)

(New in MRPT 2.3.3)

template <typename POSE_T>
TBoundingBox_<T> compose(const POSE_T& pose) const

Returns a new bounding box, transforming this from local coordinates to global coordinates, as if this was given with respect to pose, ie:

return.min = pose \oplus this->min
return.max = pose \oplus this->max

If a rotation exists, the output bounding box will no longer be an accurate representation of the actual 3D box.

Parameters:

POSE_T

Can be mrpt::poses::CPose3D, or mrpt::math::TPose3D

template <typename POSE_T>
TBoundingBox_<T> inverseCompose(const POSE_T& pose) const

Returns a new bounding box, transforming this from global coordinates to local coordinates with respect to pose, ie:

return.min = this->min \ominus pose
return.max = this->max \ominus pose

If a rotation exists, the output bounding box will no longer be an accurate representation of the actual 3D box.

Parameters:

POSE_T

Can be mrpt::poses::CPose3D, or mrpt::math::TPose3D

std::string asString() const

Print bounding box as a string with format “(minx,miny,minz)-(maxx,maxy,maxz)”.

Do not inherit from mrpt::Stringifyable to avoid virtual class table and keeping the class trivially-copiable.

static TBoundingBox_<T> PlusMinusInfinity()

Initialize with min=+Infinity, max=-Infinity.

This is useful as an initial value before processing a list of points to keep their minimum/maximum.

static TBoundingBox_<T> FromUnsortedPoints(const mrpt::math::TPoint3D_<T>& pt1, const mrpt::math::TPoint3D_<T>& pt2)

Construct a bounding box from two points, by selecting their minimum and maximum (x,y,z) coordinates, so the point coordinates do not need to be already sorted by the user as one being the minimum and maximum corners.

(New in MRPT 2.5.6)