42 #define PA(i,d) (pa[pidx[(i)]][(d)])
44 #define PP(i) (pa[pidx[(i)]])
59 for (
int d = 0; d <
dim; d++) {
60 length = bnd_box.
hi[d] - bnd_box.
lo[d];
61 if (length < min_length) min_length = length;
62 if (length > max_length) max_length = length;
64 return max_length/min_length;
80 for (
int d = 0; d <
dim; d++) {
83 for (
int i = 0; i < n; i++) {
84 if (PA(i,d) < lo_bnd) lo_bnd = PA(i,d);
85 else if (PA(i,d) > hi_bnd) hi_bnd = PA(i,d);
104 for (d = 0; d <
dim; d++) {
110 for (d = 0; d <
dim; d++) {
112 ANNcoord half_diff = (max_len - len) / 2;
113 bnds.
lo[d] -= half_diff;
114 bnds.
hi[d] += half_diff;
133 for (
register int d = 0; d <
dim; d++) {
136 dist = ANN_SUM(dist, ANN_POW(t));
138 else if (q[d] > hi[d]) {
140 dist = ANN_SUM(dist, ANN_POW(t));
162 for (
int i = 1; i < n; i++) {
164 if (c < min) min = c;
165 else if (c > max) max = c;
180 for (
int i = 1; i < n; i++) {
182 if (c < min) min = c;
183 else if (c > max) max = c;
198 for (
int d = 0; d <
dim; d++) {
228 #define PASWAP(a,b) { int tmp = pidx[a]; pidx[a] = pidx[b]; pidx[b] = tmp; }
241 register int i = (r+l)/2;
244 if (PA(i,d) > PA(r,d))
252 while (PA(++i,d) < c) ;
253 while (PA(--k,d) > c) ;
254 if (i < k) PASWAP(i,k)
else break;
258 if (k > n_lo) r = k-1;
259 else if (k < n_lo) l = k+1;
265 for (
int i = 1; i < n_lo; i++) {
274 cv = (PA(n_lo-1,d) + PA(n_lo,d))/2.0;
303 while (l < n && PA(l,d) < cv) l++;
304 while (r >= 0 && PA(r,d) >= cv) r--;
312 while (l < n && PA(l,d) <= cv) l++;
313 while (r >= br1 && PA(r,d) > cv) r--;
343 while (l < n && box.
inside(dim, PP(l))) l++;
344 while (r >= 0 && !box.
inside(dim, PP(r))) r--;
368 for(
int i = 0; i < n; i++) {
369 if (PA(i,d) < cv) n_lo++;
393 for (i = 0; i <
dim; i++) {
394 if (inner_box.
lo[i] > bnd_box.
lo[i])
396 if (inner_box.
hi[i] < bnd_box.
hi[i])
403 for (i = 0; i <
dim; i++) {
404 if (inner_box.
lo[i] > bnd_box.
lo[i]) {
406 bnds[j].
cv = inner_box.
lo[i];
410 if (inner_box.
hi[i] < bnd_box.
hi[i]) {
412 bnds[j].
cv = inner_box.
hi[i];
435 for (
int i = 0; i < n_bnds; i++) {
void annBoxSplit(ANNpointArray pa, ANNidxArray pidx, int n, int dim, ANNorthRect &box, int &n_in)
ANNcoord annSpread(ANNpointArray pa, ANNidxArray pidx, int n, int d)
void annEnclRect(ANNpointArray pa, ANNidxArray pidx, int n, int dim, ANNorthRect &bnds)
void annMinMax(ANNpointArray pa, ANNidxArray pidx, int n, int d, ANNcoord &min, ANNcoord &max)
void annBox2Bnds(const ANNorthRect &inner_box, const ANNorthRect &bnd_box, int dim, int &n_bnds, ANNorthHSArray &bnds)
double annAspectRatio(int dim, const ANNorthRect &bnd_box)
void project(ANNpoint &q)
int annMaxSpread(ANNpointArray pa, ANNidxArray pidx, int n, int dim)
void annEnclCube(ANNpointArray pa, ANNidxArray pidx, int n, int dim, ANNorthRect &bnds)
int annSplitBalance(ANNpointArray pa, ANNidxArray pidx, int n, int d, ANNcoord cv)
void annMedianSplit(ANNpointArray pa, ANNidxArray pidx, int n, int d, ANNcoord &cv, int n_lo)
ANNdist annBoxDistance(const ANNpoint q, const ANNpoint lo, const ANNpoint hi, int dim)
void annPlaneSplit(ANNpointArray pa, ANNidxArray pidx, int n, int d, ANNcoord cv, int &br1, int &br2)
void annBnds2Box(const ANNorthRect &bnd_box, int dim, int n_bnds, ANNorthHSArray bnds, ANNorthRect &inner_box)
ANNbool inside(int dim, ANNpoint p)
void annAssignRect(int dim, ANNorthRect &dest, const ANNorthRect &source)