summaryrefslogtreecommitdiff
path: root/geom_bottleneck/bottleneck/src/ann/bd_pr_search.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'geom_bottleneck/bottleneck/src/ann/bd_pr_search.cpp')
-rw-r--r--geom_bottleneck/bottleneck/src/ann/bd_pr_search.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/geom_bottleneck/bottleneck/src/ann/bd_pr_search.cpp b/geom_bottleneck/bottleneck/src/ann/bd_pr_search.cpp
new file mode 100644
index 0000000..fb9dea6
--- /dev/null
+++ b/geom_bottleneck/bottleneck/src/ann/bd_pr_search.cpp
@@ -0,0 +1,66 @@
+//----------------------------------------------------------------------
+// File: bd_pr_search.cpp
+// Programmer: David Mount
+// Description: Priority search for bd-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
+//----------------------------------------------------------------------
+
+#include "bd_tree.h" // bd-tree declarations
+#include "kd_pr_search.h" // kd priority search declarations
+
+
+namespace geom_bt {
+
+//----------------------------------------------------------------------
+// Approximate priority searching for bd-trees.
+// See the file kd_pr_search.cc for general information on the
+// approximate nearest neighbor priority search algorithm. Here
+// we include the extensions for shrinking nodes.
+//----------------------------------------------------------------------
+
+//----------------------------------------------------------------------
+// bd_shrink::ann_search - search a shrinking node
+//----------------------------------------------------------------------
+
+void ANNbd_shrink::ann_pri_search(ANNdist box_dist)
+{
+ ANNdist inner_dist = 0; // distance to inner box
+ for (int i = 0; i < n_bnds; i++) { // is query point in the box?
+ if (bnds[i].out(ANNprQ)) { // outside this bounding side?
+ // add to inner distance
+ inner_dist = (ANNdist) ANN_SUM(inner_dist, bnds[i].dist(ANNprQ));
+ }
+ }
+ if (inner_dist <= box_dist) { // if inner box is closer
+ if (child[ANN_OUT] != KD_TRIVIAL) // enqueue outer if not trivial
+ ANNprBoxPQ->insert(box_dist,child[ANN_OUT]);
+ // continue with inner child
+ child[ANN_IN]->ann_pri_search(inner_dist);
+ }
+ else { // if outer box is closer
+ if (child[ANN_IN] != KD_TRIVIAL) // enqueue inner if not trivial
+ ANNprBoxPQ->insert(inner_dist,child[ANN_IN]);
+ // continue with outer child
+ child[ANN_OUT]->ann_pri_search(box_dist);
+ }
+ ANN_FLOP(3*n_bnds) // increment floating ops
+ ANN_SHR(1) // one more shrinking node
+}
+}