PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
SpatialSearch.h File Reference

Generic efficient spatial search query implementations. More...

#include "pbat/Aliases.h"
#include "pbat/HostDevice.h"
#include "pbat/common/ConstexprFor.h"
#include "pbat/common/Heap.h"
#include "pbat/common/NAryTreeTraversal.h"
#include "pbat/common/Queue.h"
#include "pbat/common/Stack.h"
#include <algorithm>
#include <array>
#include <limits>
#include <queue>
#include <type_traits>
#include "pbat/warning/Push.h"
#include "pbat/warning/SignConversion.h"
#include "pbat/warning/Pop.h"

Go to the source code of this file.

Namespaces

namespace  pbat
 The main namespace of the library.
 
namespace  pbat::geometry
 Geometric queries, quantities and data structures.
 

Functions

template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FNodeOverlap, class FObjectOverlap, class FOnFound, auto N = 2, class TIndex = Index, auto kStackDepth = 64>
PBAT_HOST_DEVICE bool pbat::geometry::Overlaps (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FNodeOverlap fNodeOverlaps, FObjectOverlap fObjectOverlaps, FOnFound fOnFound, TIndex root=0)
 Find all nodes in a branch and bound tree that overlap with a given object.
 
template<class FChildLhs, class FIsLeafLhs, class FLeafSizeLhs, class FLeafObjectLhs, class FChildRhs, class FIsLeafRhs, class FLeafSizeRhs, class FLeafObjectRhs, class FNodesOverlap, class FObjectsOverlap, class FOnFound, auto NLhs = 2, auto NRhs = 2, class TIndex = Index, auto kStackDepth = 128>
PBAT_HOST_DEVICE bool pbat::geometry::Overlaps (FChildLhs fChildLhs, FIsLeafLhs fIsLeafLhs, FLeafSizeLhs fLeafSizeLhs, FLeafObjectLhs fLeafObjectLhs, FChildRhs fChildRhs, FIsLeafRhs fIsLeafRhs, FLeafSizeRhs fLeafSizeRhs, FLeafObjectRhs fLeafObjectRhs, FNodesOverlap fNodesOverlap, FObjectsOverlap fObjectsOverlap, FOnFound fOnFound, TIndex rootLhs=0, TIndex rootRhs=0)
 Computes overlaps between two branch and bound trees.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FNodesOverlap, class FObjectsOverlap, class FOnFound, auto N = 2, class TIndex = Index, auto kStackDepth = 128>
PBAT_HOST_DEVICE bool pbat::geometry::SelfOverlaps (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FNodesOverlap fNodesOverlap, FObjectsOverlap fObjectsOverlap, FOnFound fOnFound, TIndex root=0)
 Compute overlapping nodes from a branch and bound tree rooted in root.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FDistanceLowerBound, class FDistance, class FOnFound, auto N = 2, class TScalar = Scalar, class TIndex = Index, auto kStackDepth = 64, auto kQueueSize = 8>
PBAT_HOST_DEVICE bool pbat::geometry::DfsAllNearestNeighbours (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FDistanceLowerBound fLower, FDistance fDistance, FOnFound fOnFound, bool bUseBestFirstSearch=false, TScalar fUpper=std::numeric_limits< TScalar >::max(), TScalar eps=TScalar(0), TIndex root=0)
 Find distance minimizing objects in branch and bound tree rooted in root.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FDistanceLowerBound, class FDistance, class FOnFound, auto N = 2, class TScalar = Scalar, class TIndex = Index, auto kHeapCapacity = N * 1024>
PBAT_HOST_DEVICE bool pbat::geometry::NearestToFurthestNeighbours (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FDistanceLowerBound fLower, FDistance fDistance, FOnFound fOnFound, TScalar fUpper=std::numeric_limits< TScalar >::max(), TIndex root=0)
 Traverse objects in a branch and bound tree rooted in root in increasing order of distance.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FDistanceLowerBound, class FDistance, class FOnFound, auto N = 2, class TScalar = Scalar, class TIndex = Index, auto kHeapCapacity = N * 1024>
PBAT_HOST_DEVICE bool pbat::geometry::AllNearestNeighbours (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FDistanceLowerBound fLower, FDistance fDistance, FOnFound fOnFound, TScalar fUpper=std::numeric_limits< TScalar >::max(), TScalar eps=TScalar(0), TIndex root=0)
 Find all global distance minimizers in a branch and bound tree rooted in root.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FDistanceLowerBound, class FDistance, class FOnFound, auto N = 2, class TScalar = Scalar, class TIndex = Index, auto kHeapCapacity = N * 1024>
PBAT_HOST_DEVICE bool pbat::geometry::KNearestNeighbours (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FDistanceLowerBound fLower, FDistance fDistance, FOnFound fOnFound, TIndex K, TScalar fUpper=std::numeric_limits< TScalar >::max(), TIndex root=0)
 Find the (sorted) K objects with the smallest distances in a branch and bound tree rooted in root.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FNodeOverlap, class FObjectOverlap, class FOnFound, auto N, class TIndex, auto kStackDepth>
bool pbat::geometry::Overlaps (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FNodeOverlap fNodeOverlaps, FObjectOverlap fObjectOverlaps, FOnFound fOnFound, TIndex root)
 Find all nodes in a branch and bound tree that overlap with a given object.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FDistanceLowerBound, class FDistance, class FOnFound, auto N, class TScalar, class TIndex, auto kStackDepth, auto kQueueSize>
bool pbat::geometry::DfsAllNearestNeighbours (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FDistanceLowerBound fLower, FDistance fDistance, FOnFound fOnFound, bool bUseBestFirstSearch, TScalar fUpper, TScalar eps, TIndex root)
 Find distance minimizing objects in branch and bound tree rooted in root.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FDistanceLowerBound, class FDistance, class FOnFound, auto N, class TScalar, class TIndex, auto kHeapCapacity>
bool pbat::geometry::NearestToFurthestNeighbours (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FDistanceLowerBound fLower, FDistance fDistance, FOnFound fOnFound, TScalar fUpper, TIndex root)
 Traverse objects in a branch and bound tree rooted in root in increasing order of distance.
 
template<class FChild, class FIsLeaf, class FLeafSize, class FLeafObject, class FDistanceLowerBound, class FDistance, class FOnFound, auto N, class TScalar, class TIndex, auto kHeapCapacity>
bool pbat::geometry::KNearestNeighbours (FChild fChild, FIsLeaf fIsLeaf, FLeafSize fLeafSize, FLeafObject fLeafObject, FDistanceLowerBound fLower, FDistance fDistance, FOnFound fOnFound, TIndex K, TScalar fUpper, TIndex root)
 Find the (sorted) K objects with the smallest distances in a branch and bound tree rooted in root.
 

Detailed Description

Generic efficient spatial search query implementations.

Author
Quoc-Minh Ton-That (tonth.nosp@m.at.q.nosp@m.uocmi.nosp@m.nh@g.nosp@m.mail..nosp@m.com)
Date
2025-02-10