#include <kdtree.h>
class to find closest points in space for a given point cloud
公共成员函数 |
|
KDTree () | |
Result < void > | Init ( Int maxThreads) |
void | Free () |
Result < void > | Insert (const 向量 &point, Int idValue) |
void | Balance () |
Int | FindNearest ( Int threadIndex, const 向量 &point, KDTreeNearest *nearest) |
Int | FindNearest ( Int threadIndex, const 向量 &point, Float maxDistance, BaseArray < KDTreeNearest > &list, Int maxElements, Bool sortResults) |
Int | FindRange ( Int threadIndex, const 向量 &point, Float maxDistance, BaseArray < KDTreeNearest > &list, Bool sortResults) |
私有成员函数 |
|
MAXON_DISALLOW_COPY_AND_ASSIGN ( KDTree ) | |
KDTreeNode * | Balance ( Int index, Int count) |
void | InsertElement ( BaseArray < KDTreeNearest > &list, Int &count, Float &maxRangeSquare, Int maxElements, KDTreeNode *node, Float distanceSquare) |
Bool | AppendElement ( BaseArray < KDTreeNearest > &list, KDTreeNode *node, Float distance) |
Private Attributes |
|
KDTreeNode * | _root |
BaseArray < KDTreeNode > | _nodelist |
PointerArray < KDStackArray > | _stack |
KDTree | ( | ) |
|
private |
Result <void> Init | ( | Int | maxThreads | ) |
Initialize the kd-tree.
[in] | maxThreads | Maximum number of threads using the tree at the same time. set to 1 if no MP is used. |
void Free | ( | ) |
free the kd-tree and helper arrays
Result <void> Insert | ( | const 向量 & | point , |
Int | idValue | ||
) |
Insert a node into the kd-tree.
void Balance | ( | ) |
balance the kd-tree. This needs to be done once after all nodes have been inserted calling 'Insert'
Int FindNearest | ( | Int | threadIndex , |
const 向量 & | point , | ||
KDTreeNearest * | nearest | ||
) |
Find the nearest node in the kd-tree.
[in] | threadIndex | Index of thread using the tree, set to 0 if no MP is used. |
[in] | point | Point in space that is searched for. |
[out] | nearest | Optional, can be nullptr. If provided the structure will be filled with information about the nearest node. |
Int FindNearest | ( | Int | threadIndex , |
const 向量 & | point , | ||
Float | maxDistance , | ||
BaseArray < KDTreeNearest > & | list , | ||
Int | maxElements , | ||
Bool | sortResults | ||
) |
Find the nearest nodes in the kd-tree note: for performance reasons this routine should only be called if the maximum number of searched nodes is sufficiently small (<100), otherwise FindRange is the better choice.
[in] | threadIndex | Index of thread using the tree, set to 0 if no MP is used. |
[in] | point | Point in space that is searched for. |
[in] | maxDistance | Optional, can be MAXVALUE_FLOAT. If provided only nodes within this distance are searched. |
[out] | list | Array that will be filled with search results. the array doesn't have to be initialized before, this will be done inside the routine. for performance reasons try to re-use the array, so that memory doesn't have to be allocated each time. |
[in] | maxElements | Maximum number of elements that shall be searched for. |
[in] | sortResults | If true the resulting array will be sorted by distance, starting with the closest point. |
Int FindRange | ( | Int | threadIndex , |
const 向量 & | point , | ||
Float | maxDistance , | ||
BaseArray < KDTreeNearest > & | list , | ||
Bool | sortResults | ||
) |
Find all nodes within a radius in the kd-tree note depending on the structure of the tree there can be a lot of search results (in an extreme case as many as there are nodes in the tree, which costs SIZEOF(KDTreeNearest) *nodes bytes memory.
[in] | threadIndex | Index of thread using the tree, set to 0 if no MP is used. |
[in] | point | Point in space that is searched for. |
[in] | maxDistance | Distance that nodes are searched within. |
[out] | list | Array that will be filled with search results. the array doesn't have to be initialized before, this will be done inside the routine. for performance reasons try to re-use the array, so that memory doesn't have to be allocated each time. |
[in] | sortResults | If true the resulting array will be sorted by distance, starting with the closest point. |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |