diff --git a/A1/coord_query_kdtree b/A1/coord_query_kdtree index 3dab3e7..e71ff1b 100755 Binary files a/A1/coord_query_kdtree and b/A1/coord_query_kdtree differ diff --git a/A1/coord_query_kdtree.c b/A1/coord_query_kdtree.c index 4d91029..67d93ab 100644 --- a/A1/coord_query_kdtree.c +++ b/A1/coord_query_kdtree.c @@ -11,6 +11,9 @@ #include "euclidean_distance.h" #include "coord_query.h" +struct record* closest_point; +double closest_point_distance; + int lon_comp_func(const void* a, const void* b) { return ( ((struct record*)a)->lon - ((struct record*)b)->lon @@ -78,40 +81,42 @@ void free_kdtree(struct node* data) { free_kdtree(right); } -struct record* lookup(struct record* closest, double query[2], struct node* tree) { +void lookup(double query[2], struct node* tree) { if (tree == NULL) { - return closest; + return; } 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; + double closest_coords[2] = {closest_point->lon, closest_point->lat}; + closest_point_distance = calc_euclidean(query, closest_coords); + if (dist < closest_point_distance) { + closest_point = tree->record; } double diff = tree->point[tree->axis] - query[tree->axis]; - if (diff >= 0 || closest_dist > fabs(diff)) { - closest = lookup(closest, query, tree->left); + if (diff >= 0 || closest_point_distance > fabs(diff)) { + lookup(query, tree->left); } - if (diff <= 0 || closest_dist > fabs(diff)) { - closest = lookup(closest, query, tree->right); + if (diff <= 0 || closest_point_distance > fabs(diff)) { + lookup(query, tree->right); } - return closest; + return; } const struct record* lookup_kdtree(struct node *data, double lon, double lat) { - struct record* closest = data->record; + closest_point = data->record; double query[2] = {lon, lat}; + double compare_coord[2] = {data->point[0], data->point[1]}; + closest_point_distance = calc_euclidean(query, compare_coord); - closest = lookup(closest, query, data); + lookup(query, data); - return closest; + return closest_point; } int main(int argc, char** argv) {