kd_util.h
上传用户:chinafayin
上传日期:2022-04-05
资源大小:153k
文件大小:5k
源码类别:

并行计算

开发平台:

Visual C++

  1. //----------------------------------------------------------------------
  2. // File: kd_util.h
  3. // Programmer: Sunil Arya and David Mount
  4. // Description: Common utilities for kd- trees
  5. // Last modified: 01/04/05 (Version 1.0)
  6. //----------------------------------------------------------------------
  7. // Copyright (c) 1997-2005 University of Maryland and Sunil Arya and
  8. // David Mount.  All Rights Reserved.
  9. // 
  10. // This software and related documentation is part of the Approximate
  11. // Nearest Neighbor Library (ANN).  This software is provided under
  12. // the provisions of the Lesser GNU Public License (LGPL).  See the
  13. // file ../ReadMe.txt for further information.
  14. // 
  15. // The University of Maryland (U.M.) and the authors make no
  16. // representations about the suitability or fitness of this software for
  17. // any purpose.  It is provided "as is" without express or implied
  18. // warranty.
  19. //----------------------------------------------------------------------
  20. // History:
  21. // Revision 0.1  03/04/98
  22. // Initial release
  23. //----------------------------------------------------------------------
  24. #ifndef ANN_kd_util_H
  25. #define ANN_kd_util_H
  26. #include "kd_tree.h" // kd-tree declarations
  27. //----------------------------------------------------------------------
  28. // externally accessible functions
  29. //----------------------------------------------------------------------
  30. double annAspectRatio( // compute aspect ratio of box
  31. int dim, // dimension
  32. const ANNorthRect &bnd_box); // bounding cube
  33. void annEnclRect( // compute smallest enclosing rectangle
  34. ANNpointArray pa, // point array
  35. ANNidxArray pidx, // point indices
  36. int n, // number of points
  37. int dim, // dimension
  38. ANNorthRect &bnds); // bounding cube (returned)
  39. void annEnclCube( // compute smallest enclosing cube
  40. ANNpointArray pa, // point array
  41. ANNidxArray pidx, // point indices
  42. int n, // number of points
  43. int dim, // dimension
  44. ANNorthRect &bnds); // bounding cube (returned)
  45. ANNdist annBoxDistance( // compute distance from point to box
  46. const ANNpoint q, // the point
  47. const ANNpoint lo, // low point of box
  48. const ANNpoint hi, // high point of box
  49. int dim); // dimension of space
  50. ANNcoord annSpread( // compute point spread along dimension
  51. ANNpointArray pa, // point array
  52. ANNidxArray pidx, // point indices
  53. int n, // number of points
  54. int d); // dimension to check
  55. void annMinMax( // compute min and max coordinates along dim
  56. ANNpointArray pa, // point array
  57. ANNidxArray pidx, // point indices
  58. int n, // number of points
  59. int d, // dimension to check
  60. ANNcoord& min, // minimum value (returned)
  61. ANNcoord& max); // maximum value (returned)
  62. int annMaxSpread( // compute dimension of max spread
  63. ANNpointArray pa, // point array
  64. ANNidxArray pidx, // point indices
  65. int n, // number of points
  66. int dim); // dimension of space
  67. void annMedianSplit( // split points along median value
  68. ANNpointArray pa, // points to split
  69. ANNidxArray pidx, // point indices
  70. int n, // number of points
  71. int d, // dimension along which to split
  72. ANNcoord &cv, // cutting value
  73. int n_lo); // split into n_lo and n-n_lo
  74. void annPlaneSplit( // split points by a plane
  75. ANNpointArray pa, // points to split
  76. ANNidxArray pidx, // point indices
  77. int n, // number of points
  78. int d, // dimension along which to split
  79. ANNcoord cv, // cutting value
  80. int &br1, // first break (values < cv)
  81. int &br2); // second break (values == cv)
  82. void annBoxSplit( // split points by a box
  83. ANNpointArray pa, // points to split
  84. ANNidxArray pidx, // point indices
  85. int n, // number of points
  86. int dim, // dimension of space
  87. ANNorthRect &box, // the box
  88. int &n_in); // number of points inside (returned)
  89. int annSplitBalance( // determine balance factor of a split
  90. ANNpointArray pa, // points to split
  91. ANNidxArray pidx, // point indices
  92. int n, // number of points
  93. int d, // dimension along which to split
  94. ANNcoord cv); // cutting value
  95. void annBox2Bnds( // convert inner box to bounds
  96. const ANNorthRect &inner_box, // inner box
  97. const ANNorthRect &bnd_box, // enclosing box
  98. int dim, // dimension of space
  99. int &n_bnds, // number of bounds (returned)
  100. ANNorthHSArray &bnds); // bounds array (returned)
  101. void annBnds2Box( // convert bounds to inner box
  102. const ANNorthRect &bnd_box, // enclosing box
  103. int dim, // dimension of space
  104. int n_bnds, // number of bounds
  105. ANNorthHSArray bnds, // bounds array
  106. ANNorthRect &inner_box); // inner box (returned)
  107. #endif