86 lines
3.6 KiB
C
86 lines
3.6 KiB
C
|
//----------------------------------------------------------------------
|
||
|
// File: kd_split.h
|
||
|
// Programmer: Sunil Arya and David Mount
|
||
|
// Description: Methods for splitting kd-trees
|
||
|
// Last modified: 01/04/05 (Version 1.0)
|
||
|
//----------------------------------------------------------------------
|
||
|
// Copyright (c) 1997-2005 University of Maryland and Sunil Arya and
|
||
|
// David Mount. All Rights Reserved.
|
||
|
//
|
||
|
// This software and related documentation is part of the Approximate
|
||
|
// Nearest Neighbor Library (ANN). This software is provided under
|
||
|
// the provisions of the Lesser GNU Public License (LGPL). See the
|
||
|
// file ../ReadMe.txt for further information.
|
||
|
//
|
||
|
// The University of Maryland (U.M.) and the authors make no
|
||
|
// representations about the suitability or fitness of this software for
|
||
|
// any purpose. It is provided "as is" without express or implied
|
||
|
// warranty.
|
||
|
//----------------------------------------------------------------------
|
||
|
// History:
|
||
|
// Revision 0.1 03/04/98
|
||
|
// Initial release
|
||
|
//----------------------------------------------------------------------
|
||
|
|
||
|
#ifndef ANN_KD_SPLIT_H
|
||
|
#define ANN_KD_SPLIT_H
|
||
|
|
||
|
#include "kd_tree.h" // kd-tree definitions
|
||
|
|
||
|
//----------------------------------------------------------------------
|
||
|
// External entry points
|
||
|
// These are all splitting procedures for kd-trees.
|
||
|
//----------------------------------------------------------------------
|
||
|
|
||
|
void kd_split( // standard (optimized) kd-splitter
|
||
|
ANNpointArray pa, // point array (unaltered)
|
||
|
ANNidxArray pidx, // point indices (permuted on return)
|
||
|
const ANNorthRect &bnds, // bounding rectangle for cell
|
||
|
int n, // number of points
|
||
|
int dim, // dimension of space
|
||
|
int &cut_dim, // cutting dimension (returned)
|
||
|
ANNcoord &cut_val, // cutting value (returned)
|
||
|
int &n_lo); // num of points on low side (returned)
|
||
|
|
||
|
void midpt_split( // midpoint kd-splitter
|
||
|
ANNpointArray pa, // point array (unaltered)
|
||
|
ANNidxArray pidx, // point indices (permuted on return)
|
||
|
const ANNorthRect &bnds, // bounding rectangle for cell
|
||
|
int n, // number of points
|
||
|
int dim, // dimension of space
|
||
|
int &cut_dim, // cutting dimension (returned)
|
||
|
ANNcoord &cut_val, // cutting value (returned)
|
||
|
int &n_lo); // num of points on low side (returned)
|
||
|
|
||
|
void sl_midpt_split( // sliding midpoint kd-splitter
|
||
|
ANNpointArray pa, // point array (unaltered)
|
||
|
ANNidxArray pidx, // point indices (permuted on return)
|
||
|
const ANNorthRect &bnds, // bounding rectangle for cell
|
||
|
int n, // number of points
|
||
|
int dim, // dimension of space
|
||
|
int &cut_dim, // cutting dimension (returned)
|
||
|
ANNcoord &cut_val, // cutting value (returned)
|
||
|
int &n_lo); // num of points on low side (returned)
|
||
|
|
||
|
void fair_split( // fair-split kd-splitter
|
||
|
ANNpointArray pa, // point array (unaltered)
|
||
|
ANNidxArray pidx, // point indices (permuted on return)
|
||
|
const ANNorthRect &bnds, // bounding rectangle for cell
|
||
|
int n, // number of points
|
||
|
int dim, // dimension of space
|
||
|
int &cut_dim, // cutting dimension (returned)
|
||
|
ANNcoord &cut_val, // cutting value (returned)
|
||
|
int &n_lo); // num of points on low side (returned)
|
||
|
|
||
|
void sl_fair_split( // sliding fair-split kd-splitter
|
||
|
ANNpointArray pa, // point array (unaltered)
|
||
|
ANNidxArray pidx, // point indices (permuted on return)
|
||
|
const ANNorthRect &bnds, // bounding rectangle for cell
|
||
|
int n, // number of points
|
||
|
int dim, // dimension of space
|
||
|
int &cut_dim, // cutting dimension (returned)
|
||
|
ANNcoord &cut_val, // cutting value (returned)
|
||
|
int &n_lo); // num of points on low side (returned)
|
||
|
|
||
|
#endif
|