# [Math API]

## Description

An axis-aligned N-dimensional bounding box class template of fixed dimension with supporting functions.

Include File:

#include <mi/math/bbox.h>

## Classes

class
Axis-aligned N-dimensional bounding box class template of fixed dimension. More...
struct
Storage class for an axis-aligned N-dimensional bounding box class template of fixed dimension. More...

## Functions

template< typename T, Size> Bbox < T , DIM > mi::math::clip( const Bbox < T , DIM >& bbox1, const Bbox < T , DIM >& bbox2)
Clip bbox1 at bbox2 and return the result. More...
template< typename T, Size> Bbox < T , DIM > mi::math::lerp( const Bbox < T , DIM >& bbox1, const Bbox < T , DIM >& bbox2, T t)
Returns the linear interpolation between bbox1 and bbox2, i.e., it returns (1-t) * bbox1 + t * bbox2. More...
template< typename T, Size>bool  mi::math::operator!=( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs)
Returns true if lhs is elementwise not equal to rhs.
template< typename T, Size> Bbox < T , DIM > mi::math::operator*( const Bbox < T , DIM >& bbox, T factor)
Returns a bounding box that is a version of bbox scaled by factor, i.e., bbox.max and bbox.min are multiplied by factor. More...
template< typename T, Size> Bbox < T , DIM >& mi::math::operator*=( Bbox < T , DIM >& bbox, T factor)
Scales bbox by factor, i.e., bbox.max and bbox.min are multiplied by factor. More...
template< typename T, Size> Bbox < T , DIM > mi::math::operator+( const Bbox < T , DIM >& bbox, T value)
Returns a bounding box that is the bbox increased by a constant value at each face, i.e., value is added to bbox.max and subtracted from bbox.min. More...
template< typename T, Size> Bbox < T , DIM >& mi::math::operator+=( Bbox < T , DIM >& bbox, T value)
Increases bbox by a constant value at each face, i.e., value is added to bbox.max and subtracted from bbox.min. More...
template< typename T, Size> Bbox < T , DIM > mi::math::operator-( const Bbox < T , DIM >& bbox, T value)
Returns a bounding box that is the bbox shrunk by a constant value at each face, i.e., value is subtracted from bbox.max and added to bbox.min. More...
template< typename T, Size> Bbox < T , DIM >& mi::math::operator-=( Bbox < T , DIM >& bbox, T value)
Shrinks bbox by a constant value at each face, i.e., value is subtracted from bbox.max and added to bbox.min. More...
template< typename T, Size> Bbox < T , DIM > mi::math::operator/( const Bbox < T , DIM >& bbox, T divisor)
Returns a bounding box that is a version of bbox divided by divisor, i.e., bbox.max and bbox.min are divided by divisor. More...
template< typename T, Size> Bbox < T , DIM >& mi::math::operator/=( Bbox < T , DIM >& bbox, T divisor)
Divide bbox by divisor, i.e., bbox.max and bbox.min are divided by divisor. More...
template< typename T, Size>bool  mi::math::operator<( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs)
Returns true if lhs is lexicographically less than rhs. More...
template< typename T, Size>bool  mi::math::operator<=( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs)
Returns true if lhs is lexicographically less than or equal to rhs. More...
template< typename T, Size>bool  mi::math::operator==( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs)
Returns true if lhs is elementwise equal to rhs.
template< typename T, Size>bool  mi::math::operator>( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs)
Returns true if lhs is lexicographically greater than rhs. More...
template< typename T, Size>bool  mi::math::operator>=( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs)
Returns true if lhs is lexicographically greater than or equal to rhs. More...
template< typename TT, typename T> Bbox < T , 3 > mi::math::transform_point( const Matrix < TT , 4 , 4 >& mat, const Bbox < T , 3 >& bbox)
Returns the 3D bounding box transformed by a matrix. More...
template< typename TT, typename T> Bbox < T , 3 > mi::math::transform_vector( const Matrix < TT , 4 , 4 >& mat, const Bbox < T , 3 >& bbox)
Returns the 3D bounding box transformed by a matrix. More...

## Functions

template< typename T, Size>

Bbox < T , DIM > mi::math::clip( const Bbox < T , DIM >& bbox1, const Bbox < T , DIM >& bbox2) [inline]

Clip bbox1 at bbox2 and return the result. I.e., the resulting bbox is the intersection of bbox1 with bbox2.

#### Parameters

bbox1
first bounding box
bbox2
second bounding box

template< typename T, Size>

Bbox < T , DIM > mi::math::lerp( const Bbox < T , DIM >& bbox1, const Bbox < T , DIM >& bbox2, T t) [inline]

Returns the linear interpolation between bbox1 and bbox2, i.e., it returns (1-t) * bbox1 + t * bbox2.

Precondition:

bbox1 and bbox2 are not empty.

#### Parameters

bbox1
one bounding box
bbox2
second bounding box
t
interpolation parameter in [0,1]

template< typename T, Size>

bool mi::math::operator!=( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs) [inline]

Returns true if lhs is elementwise not equal to rhs.

template< typename T, Size>

Bbox < T , DIM > mi::math::operator*( const Bbox < T , DIM >& bbox, T factor) [inline]

Returns a bounding box that is a version of bbox scaled by factor, i.e., bbox.max and bbox.min are multiplied by factor.

Precondition:

bbox is not empty

template< typename T, Size>

Bbox < T , DIM >& mi::math::operator*=( Bbox < T , DIM >& bbox, T factor) [inline]

Scales bbox by factor, i.e., bbox.max and bbox.min are multiplied by factor.

Precondition:

bbox is not empty

template< typename T, Size>

Bbox < T , DIM > mi::math::operator+( const Bbox < T , DIM >& bbox, T value) [inline]

Returns a bounding box that is the bbox increased by a constant value at each face, i.e., value is added to bbox.max and subtracted from bbox.min.

Precondition:

bbox is not empty

template< typename T, Size>

Bbox < T , DIM >& mi::math::operator+=( Bbox < T , DIM >& bbox, T value) [inline]

Increases bbox by a constant value at each face, i.e., value is added to bbox.max and subtracted from bbox.min.

Precondition:

bbox is not empty

template< typename T, Size>

Bbox < T , DIM > mi::math::operator-( const Bbox < T , DIM >& bbox, T value) [inline]

Returns a bounding box that is the bbox shrunk by a constant value at each face, i.e., value is subtracted from bbox.max and added to bbox.min.

Precondition:

bbox is not empty

template< typename T, Size>

Bbox < T , DIM >& mi::math::operator-=( Bbox < T , DIM >& bbox, T value) [inline]

Shrinks bbox by a constant value at each face, i.e., value is subtracted from bbox.max and added to bbox.min.

Precondition:

bbox is not empty

template< typename T, Size>

Bbox < T , DIM > mi::math::operator/( const Bbox < T , DIM >& bbox, T divisor) [inline]

Returns a bounding box that is a version of bbox divided by divisor, i.e., bbox.max and bbox.min are divided by divisor.

Precondition:

bbox is not empty and divisor is not zero

template< typename T, Size>

Bbox < T , DIM >& mi::math::operator/=( Bbox < T , DIM >& bbox, T divisor) [inline]

Divide bbox by divisor, i.e., bbox.max and bbox.min are divided by divisor.

Precondition:

bbox is not empty and divisor is not zero

template< typename T, Size>

bool mi::math::operator<( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs) [inline]

Returns true if lhs is lexicographically less than rhs.

mi_def_lexicographic_order

template< typename T, Size>

bool mi::math::operator<=( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs) [inline]

Returns true if lhs is lexicographically less than or equal to rhs.

mi_def_lexicographic_order

template< typename T, Size>

bool mi::math::operator==( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs) [inline]

Returns true if lhs is elementwise equal to rhs.

template< typename T, Size>

bool mi::math::operator>( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs) [inline]

Returns true if lhs is lexicographically greater than rhs.

mi_def_lexicographic_order

template< typename T, Size>

bool mi::math::operator>=( const Bbox < T , DIM >& lhs, const Bbox < T , DIM >& rhs) [inline]

Returns true if lhs is lexicographically greater than or equal to rhs.

mi_def_lexicographic_order

template< typename TT, typename T>

Bbox < T , 3 > mi::math::transform_point( const Matrix < TT , 4 , 4 >& mat, const Bbox < T , 3 >& bbox) [inline]

Returns the 3D bounding box transformed by a matrix. The transformation (including the translation) is applied to the eight bounding box corners (interpreted as points) and a new axis aligned bounding box is computed for these transformed corners.

Note:

The transformed bounding box is likely to be a more pessimistic approximation of a geometry that was approximated by the original bounding box. Transforming the approximated geometry and computing a new bounding box gives usually a tighter bounding box.

#### Parameters

mat
4x4 transformation matrix
bbox
the bounding box to transform

template< typename TT, typename T>

Bbox < T , 3 > mi::math::transform_vector( const Matrix < TT , 4 , 4 >& mat, const Bbox < T , 3 >& bbox) [inline]

Returns the 3D bounding box transformed by a matrix. The transformation (excluding the translation) is applied to the eight bounding box corners (interpreted as vectors) and a new axis aligned bounding box is computed for these transformed corners.

#### Parameters

mat
4x4 transformation matrix
bbox
the bounding box to transform