20static const int dim = 4;
22static void sortPtsX(
int n, ANNpointArray pts){
24 for (
int i = 0; i < n; i++){
26 if (p[0] < p[2] || (p[0] == p[2] && p[1] < p[3]))
continue;
27 std::swap(p[0], p[2]);
28 std::swap(p[1], p[3]);
32static void sortPtsY(
int n, ANNpointArray pts){
34 for (
int i = 0; i < n; i++){
36 if (p[1] < p[3] || (p[1] == p[3] && p[0] < p[2]))
continue;
37 std::swap(p[0], p[2]);
38 std::swap(p[1], p[3]);
43 int &nz0, std::vector<int> &irn,
44 std::vector<int> &jcn,
45 std::vector<double> &val) {
63 ANNpointArray dataPts = annAllocPts(nPts, dim);
64 std::vector<ANNidx> nnIdx(k);
65 std::vector<ANNdist> dists(k);
67 for (
int i = 0; i < nPts; i++){
68 double *xx = dataPts[i];
69 for (
int j = 0; j < dim; j++) xx[j] = x[i*dim + j];
74 sortPtsX(nPts, dataPts);
79 for (
int ip = 0; ip < nPts; ip++){
87 for (
int i = 0; i < k; i++) {
88 if (nnIdx[i] == ip)
continue;
97 sortPtsY(nPts, dataPts);
102 for (
int ip = 0; ip < nPts; ip++){
110 for (
int i = 0; i < k; i++) {
111 if (nnIdx[i] == ip)
continue;
114 jcn[nz++] = nnIdx[i];
120 annDeallocPts(dataPts);
void nearest_neighbor_graph_ann(int nPts, int k, const std::vector< double > &x, int &nz0, std::vector< int > &irn, std::vector< int > &jcn, std::vector< double > &val)