:vomit:
This commit is contained in:
Binary file not shown.
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user