template struct mrpt::math::TBoundingBox_

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::None);

    //
methods

    T volume() const;
    std::optional<TBoundingBox_<T>> intersection(const TBoundingBox_<T>& b) const;
    TBoundingBox_<T> unionWith(const TBoundingBox_<T>& b) const;
    void updateWithPoint(const mrpt::math::TPoint3D_<T>& p);

    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;
    static TBoundingBox_<T> PlusMinusInfinity();
};

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::None)

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

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

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.

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)”.

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.