This commit is contained in:
Nikolaj
2021-10-06 16:54:21 +02:00
parent a8aaf7a884
commit 45f5abaea1
2 changed files with 13 additions and 11 deletions

Binary file not shown.

View File

@ -78,36 +78,38 @@ void free_kdtree(struct node* data) {
free_kdtree(right);
}
void lookup(struct record** closest, double closest_dist, double query[2], struct node* tree) {
struct record* lookup(struct record* closest, double query[2], struct node* tree) {
if (tree == NULL) {
return;
return closest;
}
double compare_coord[2] = {tree->point[0], tree->point[1]};
double dist = calc_euclidean(query, compare_coord);
double closest_coords[2] = {closest->lon, closest->lat};
double closest_dist = calc_euclidean(query, closest_coords);
if (dist < closest_dist) {
closest = &tree->record;
closest_dist = dist;
closest = tree->record;
}
double diff = tree->point[tree->axis] - query[tree->axis];
if (diff >= 0 || closest_dist > fabs(diff)) {
lookup(closest, closest_dist, query, tree->left);
} else if (diff <= 0 || closest_dist > fabs(diff)) {
lookup(closest, closest_dist, query, tree->right);
closest = lookup(closest, query, tree->left);
}
return;
if (diff <= 0 || closest_dist > fabs(diff)) {
closest = lookup(closest, query, tree->right);
}
return closest;
}
const struct record* lookup_kdtree(struct node *data, double lon, double lat) {
struct record* closest = data->record;
double compare_coord[2] = {data->point[0], data->point[1]};
double query[2] = {lon, lat};
double closest_dist = calc_euclidean(query, compare_coord);
lookup(&closest, closest_dist, query, data);
closest = lookup(closest, query, data);
return closest;
}