Tatooine
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Private Member Functions | Static Private Member Functions | Friends | List of all members
tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived > Struct Template Reference

For octrees and quadtrees. More...

#include <uniform_tree_hierarchy.h>

Inheritance diagram for tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >:
[legend]
Collaboration diagram for tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >:
[legend]

Classes

struct  dim
 

Public Types

using real_type = Real
 
using this_type = base_uniform_tree_hierarchy< Real, NumDims, Derived >
 
using parent_type = aabb< Real, NumDims >
 
using vec_type = vec< Real, NumDimensions >
 
- Public Types inherited from tatooine::axis_aligned_bounding_box< Real, NumDimensions >
using real_type = Real
 
using this_type = axis_aligned_bounding_box< Real, NumDimensions >
 
using vec_type = vec< Real, NumDimensions >
 
using pos_type = vec_type
 
- Public Types inherited from tatooine::detail::aabb_ray_intersectable_parent< axis_aligned_bounding_box< Real, NumDimensions >, Real, NumDimensions >
using parent_type = ray_intersectable< Real, NumDimensions >
 
using intersection_type = intersection< real_type, NumDimensions >
 
using optional_intersection_type = std::optional< intersection_type >
 
using ray_type = ray< real_type, NumDimensions >
 
- Public Types inherited from tatooine::ray_intersectable< Real, NumDimensions >
using real_type = Real
 
using intersection_type = intersection< real_type, NumDimensions >
 
using optional_intersection_type = std::optional< intersection_type >
 
using ray_type = ray< real_type, NumDimensions >
 

Public Member Functions

 base_uniform_tree_hierarchy ()=default
 
 base_uniform_tree_hierarchy (base_uniform_tree_hierarchy const &)=default
 
 base_uniform_tree_hierarchy (base_uniform_tree_hierarchy &&) noexcept=default
 
auto operator= (base_uniform_tree_hierarchy const &) -> base_uniform_tree_hierarchy &=default
 
auto operator= (base_uniform_tree_hierarchy &&) noexcept -> base_uniform_tree_hierarchy &=default
 
virtual ~base_uniform_tree_hierarchy ()=default
 
 base_uniform_tree_hierarchy (std::size_t const max_depth=default_max_depth)
 
 base_uniform_tree_hierarchy (vec_type const &min, vec_type const &max, std::size_t const max_depth=default_max_depth)
 
constexpr auto is_splitted () const
 
constexpr auto level () const
 
constexpr auto is_at_max_depth () const
 
auto children () const -> auto const &
 
auto child_at (integral auto const ... is) const -> auto const &
 
template<std::size_t... Seq>
auto split (std::index_sequence< Seq... > seq)
 
template<typename... Args>
auto split ()
 
auto distribute ()
 
template<typename... Args>
auto construct (vec_type const &min, vec_type const &max, std::size_t const level, std::size_t const max_depth) const -> std::unique_ptr< Derived >
 
auto split_and_distribute ()
 
auto constexpr center () const
 
auto constexpr center (std::size_t const i) const
 
auto constexpr is_inside (pos_type const &p) const
 
auto constexpr max () const -> auto const &
 
auto constexpr max () -> auto &
 
auto constexpr max (std::size_t i) const -> auto const &
 
auto constexpr max (std::size_t i) -> auto &
 
auto constexpr min () const -> auto const &
 
auto constexpr min () -> auto &
 
auto constexpr min (std::size_t i) const -> auto const &
 
auto constexpr min (std::size_t i) -> auto &
 
- Public Member Functions inherited from tatooine::axis_aligned_bounding_box< Real, NumDimensions >
constexpr axis_aligned_bounding_box ()
 
constexpr axis_aligned_bounding_box (axis_aligned_bounding_box const &other)=default
 
constexpr axis_aligned_bounding_box (axis_aligned_bounding_box &&other) noexcept=default
 
constexpr auto operator= (axis_aligned_bounding_box const &other) -> axis_aligned_bounding_box &=default
 
constexpr auto operator= (axis_aligned_bounding_box &&other) noexcept -> axis_aligned_bounding_box &=default
 
 ~axis_aligned_bounding_box ()=default
 
template<typename Real0 , typename Real1 >
constexpr axis_aligned_bounding_box (vec< Real0, NumDimensions > &&min, vec< Real1, NumDimensions > &&max) noexcept
 
template<typename Real0 , typename Real1 >
constexpr axis_aligned_bounding_box (vec< Real0, NumDimensions > const &min, vec< Real1, NumDimensions > const &max)
 
template<typename Tensor0 , typename Tensor1 , typename Real0 , typename Real1 >
constexpr axis_aligned_bounding_box (base_tensor< Tensor0, Real0, NumDimensions > const &min, base_tensor< Tensor1, Real1, NumDimensions > const &max)
 
auto constexpr min () const -> auto const &
 
auto constexpr min () -> auto &
 
auto constexpr min (std::size_t i) const -> auto const &
 
auto constexpr min (std::size_t i) -> auto &
 
auto constexpr max () const -> auto const &
 
auto constexpr max () -> auto &
 
auto constexpr max (std::size_t i) const -> auto const &
 
auto constexpr max (std::size_t i) -> auto &
 
auto constexpr extents () const
 
auto constexpr extent (std::size_t i) const
 
auto constexpr area () const
 
auto constexpr volume () const
 
auto constexpr center () const
 
auto constexpr center (std::size_t const i) const
 
auto constexpr is_inside (pos_type const &p) const
 
constexpr auto is_rectangle_inside (vec< Real, 2 > x0, vec< Real, 2 > x1, vec< Real, 2 > x2, vec< Real, 2 > x3) const
 
constexpr auto is_simplex_inside (vec< Real, 2 > const &x0, vec< Real, 2 > const &x1, vec< Real, 2 > const &x2) const
 
constexpr auto is_simplex_inside (vec< Real, 3 > x0, vec< Real, 3 > x1, vec< Real, 3 > x2) const
 
constexpr auto is_simplex_inside (vec< Real, 3 > x0, vec< Real, 3 > x1, vec< Real, 3 > x2, vec< Real, 3 > x3) const
 
constexpr auto operator+= (pos_type const &point)
 
constexpr auto reset ()
 
constexpr auto add_dimension (Real const min, Real const max) const
 
template<typename RandomEngine = std::mt19937_64>
auto random_point (RandomEngine &&random_engine=RandomEngine{ std::random_device{}()}) const
 
auto write_vtk (filesystem::path const &path)
 
- Public Member Functions inherited from tatooine::detail::aabb_ray_intersectable_parent< axis_aligned_bounding_box< Real, NumDimensions >, Real, NumDimensions >
auto as_aabb () const -> auto const &
 
auto check_intersection (ray_type const &r, Real const=0) const -> optional_intersection_type override
 
- Public Member Functions inherited from tatooine::ray_intersectable< Real, NumDimensions >
virtual ~ray_intersectable ()=default
 
virtual auto check_intersection (ray_type const &r, real_type const min_t) const -> optional_intersection_type=0
 

Static Public Member Functions

static constexpr auto num_dimensions () -> std::size_t
 
static constexpr auto num_children () -> std::size_t
 
static constexpr auto index (integral auto const ... is)
 
- Static Public Member Functions inherited from tatooine::axis_aligned_bounding_box< Real, NumDimensions >
static constexpr auto num_dimensions () -> std::size_t
 
static constexpr auto infinite ()
 

Public Attributes

std::size_t m_level
 
std::size_t m_max_depth
 
std::array< std::unique_ptr< Derived >, num_children()> m_children
 

Static Public Attributes

static constexpr std::size_t default_max_depth = 4
 

Protected Member Functions

 base_uniform_tree_hierarchy (vec_type const &min, vec_type const &max, std::size_t const level, std::size_t const max_depth)
 

Private Member Functions

auto as_derived () -> auto &
 
auto as_derived () const -> auto const &
 

Static Private Member Functions

template<std::size_t... Seq, typename... Is>
static constexpr auto index (std::index_sequence< Seq... >, Is const ... is)
 

Friends

class std::unique_ptr< this_type >
 

Detailed Description

template<floating_point Real, std::size_t NumDims, typename Derived>
struct tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >

For octrees and quadtrees.

Member Typedef Documentation

◆ parent_type

template<floating_point Real, std::size_t NumDims, typename Derived >
using tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::parent_type = aabb<Real, NumDims>

◆ real_type

template<floating_point Real, std::size_t NumDims, typename Derived >
using tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::real_type = Real

◆ this_type

template<floating_point Real, std::size_t NumDims, typename Derived >
using tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::this_type = base_uniform_tree_hierarchy<Real, NumDims, Derived>

◆ vec_type

template<floating_point Real, std::size_t NumDims, typename Derived >
using tatooine::axis_aligned_bounding_box< Real, NumDimensions >::vec_type = vec<Real, NumDimensions>

Constructor & Destructor Documentation

◆ base_uniform_tree_hierarchy() [1/6]

template<floating_point Real, std::size_t NumDims, typename Derived >
tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::base_uniform_tree_hierarchy ( )
default

◆ base_uniform_tree_hierarchy() [2/6]

template<floating_point Real, std::size_t NumDims, typename Derived >
tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::base_uniform_tree_hierarchy ( base_uniform_tree_hierarchy< Real, NumDims, Derived > const &  )
default

◆ base_uniform_tree_hierarchy() [3/6]

template<floating_point Real, std::size_t NumDims, typename Derived >
tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::base_uniform_tree_hierarchy ( base_uniform_tree_hierarchy< Real, NumDims, Derived > &&  )
defaultnoexcept

◆ ~base_uniform_tree_hierarchy()

template<floating_point Real, std::size_t NumDims, typename Derived >
virtual tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::~base_uniform_tree_hierarchy ( )
virtualdefault

◆ base_uniform_tree_hierarchy() [4/6]

template<floating_point Real, std::size_t NumDims, typename Derived >
tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::base_uniform_tree_hierarchy ( std::size_t const  max_depth = default_max_depth)
inlineexplicit

◆ base_uniform_tree_hierarchy() [5/6]

template<floating_point Real, std::size_t NumDims, typename Derived >
tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::base_uniform_tree_hierarchy ( vec_type const &  min,
vec_type const &  max,
std::size_t const  max_depth = default_max_depth 
)
inline

◆ base_uniform_tree_hierarchy() [6/6]

template<floating_point Real, std::size_t NumDims, typename Derived >
tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::base_uniform_tree_hierarchy ( vec_type const &  min,
vec_type const &  max,
std::size_t const  level,
std::size_t const  max_depth 
)
inlineprotected

Member Function Documentation

◆ as_derived() [1/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::as_derived ( ) -> auto&
inlineprivate

◆ as_derived() [2/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::as_derived ( ) const -> auto const&
inlineprivate

◆ center() [1/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::center ( ) const
inlineconstexpr

◆ center() [2/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::center ( std::size_t const  i) const
inlineconstexpr

◆ child_at()

template<floating_point Real, std::size_t NumDims, typename Derived >
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::child_at ( integral auto const ...  is) const -> auto const&
inline

◆ children()

template<floating_point Real, std::size_t NumDims, typename Derived >
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::children ( ) const -> auto const&
inline

◆ construct()

template<floating_point Real, std::size_t NumDims, typename Derived >
template<typename... Args>
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::construct ( vec_type const &  min,
vec_type const &  max,
std::size_t const  level,
std::size_t const  max_depth 
) const -> std::unique_ptr<Derived>
inline

◆ distribute()

template<floating_point Real, std::size_t NumDims, typename Derived >
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::distribute ( )
inline

◆ index() [1/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
static constexpr auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::index ( integral auto const ...  is)
inlinestaticconstexpr

◆ index() [2/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
template<std::size_t... Seq, typename... Is>
static constexpr auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::index ( std::index_sequence< Seq... >  ,
Is const ...  is 
)
inlinestaticconstexprprivate

◆ is_at_max_depth()

template<floating_point Real, std::size_t NumDims, typename Derived >
constexpr auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::is_at_max_depth ( ) const
inlineconstexpr

◆ is_inside()

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::is_inside ( pos_type const &  p) const
inlineconstexpr

◆ is_splitted()

template<floating_point Real, std::size_t NumDims, typename Derived >
constexpr auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::is_splitted ( ) const
inlineconstexpr

◆ level()

template<floating_point Real, std::size_t NumDims, typename Derived >
constexpr auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::level ( ) const
inlineconstexpr

◆ max() [1/4]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::max ( ) -> auto&
inlineconstexpr

◆ max() [2/4]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::max ( ) const -> auto const&
inlineconstexpr

◆ max() [3/4]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::max ( std::size_t  i) -> auto&
inlineconstexpr

◆ max() [4/4]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::max ( std::size_t  i) const -> auto const&
inlineconstexpr

◆ min() [1/4]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::min ( ) -> auto&
inlineconstexpr

◆ min() [2/4]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::min ( ) const -> auto const&
inlineconstexpr

◆ min() [3/4]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::min ( std::size_t  i) -> auto&
inlineconstexpr

◆ min() [4/4]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::min ( std::size_t  i) const -> auto const&
inlineconstexpr

◆ num_children()

template<floating_point Real, std::size_t NumDims, typename Derived >
static constexpr auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::num_children ( ) -> std::size_t
inlinestaticconstexpr

◆ num_dimensions()

template<floating_point Real, std::size_t NumDims, typename Derived >
static constexpr auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::num_dimensions ( ) -> std::size_t
inlinestaticconstexpr

◆ operator=() [1/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::operator= ( base_uniform_tree_hierarchy< Real, NumDims, Derived > &&  ) -> base_uniform_tree_hierarchy &=default
defaultnoexcept

◆ operator=() [2/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::operator= ( base_uniform_tree_hierarchy< Real, NumDims, Derived > const &  ) -> base_uniform_tree_hierarchy &=default
default

◆ split() [1/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
template<typename... Args>
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::split ( )
inline

◆ split() [2/2]

template<floating_point Real, std::size_t NumDims, typename Derived >
template<std::size_t... Seq>
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::split ( std::index_sequence< Seq... >  seq)
inline

◆ split_and_distribute()

template<floating_point Real, std::size_t NumDims, typename Derived >
auto tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::split_and_distribute ( )
inline

Friends And Related Function Documentation

◆ std::unique_ptr< this_type >

template<floating_point Real, std::size_t NumDims, typename Derived >
friend class std::unique_ptr< this_type >
friend

Member Data Documentation

◆ default_max_depth

template<floating_point Real, std::size_t NumDims, typename Derived >
constexpr std::size_t tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::default_max_depth = 4
staticconstexpr

◆ m_children

template<floating_point Real, std::size_t NumDims, typename Derived >
std::array<std::unique_ptr<Derived>, num_children()> tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::m_children

◆ m_level

template<floating_point Real, std::size_t NumDims, typename Derived >
std::size_t tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::m_level

◆ m_max_depth

template<floating_point Real, std::size_t NumDims, typename Derived >
std::size_t tatooine::base_uniform_tree_hierarchy< Real, NumDims, Derived >::m_max_depth

The documentation for this struct was generated from the following file: