From 75e47109a6a34a151d124aac83498381c7d3fc76 Mon Sep 17 00:00:00 2001 From: Nikolaj Date: Wed, 6 Oct 2021 17:00:03 +0200 Subject: [PATCH] :tada: --- A1/coord_query_kdtree | Bin 32696 -> 32880 bytes A1/coord_query_kdtree.c | 33 +++++++++++++++++++-------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/A1/coord_query_kdtree b/A1/coord_query_kdtree index 3dab3e78d43ccf133f564ac15d4d9a233e73f8cf..e71ff1b67b9fa73f006c1f077032c9244fc839ed 100755 GIT binary patch delta 7274 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 delta 7121 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 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) {