From a7dcebdd601069bbc762849d76a3904bdda3a3ed Mon Sep 17 00:00:00 2001 From: Boris Stefanovic <owldev@bluewin.ch> Date: Wed, 8 Jun 2022 00:00:09 +0200 Subject: [PATCH] ADD: finished cluster logic, (too?) many dereferences --- src/cluster.c | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index 939ae5c..f1b2c27 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -33,51 +33,45 @@ void cluster_destroy_fpt(cluster_fpt_t* cluster) { void cluster_add_point_int(cluster_int_t* cluster, vector_int_t* point) { - //TODO if (NULL == cluster || NULL == point) return; list_points_append_int(cluster->points, point); - if (NULL == cluster->center) { - cluster->center = vector_copy_int(point); - } else { - vector_int_t* delta = vector_copy_int(point); - vector_div_inplace_int(delta, cluster->points->size); - vector_add_inplace_int(cluster->center, *delta); - vector_destroy_int(delta); - } } void cluster_add_point_fpt(cluster_fpt_t* cluster, vector_fpt_t* point) { - //TODO if (NULL == cluster || NULL == point) return; list_points_append_fpt(cluster->points, point); - if (NULL == cluster->center) { - cluster->center = vector_copy_fpt(point); - } else { - vector_fpt_t* delta = vector_copy_fpt(point); - vector_div_inplace_fpt(delta, cluster->points->size); - vector_add_inplace_fpt(cluster->center, *delta); - vector_destroy_fpt(delta); - } } void cluster_update_center_int(cluster_int_t* cluster) { - //TODO + vector_destroy_int(cluster->center); + cluster->center = vector_create_int(cluster->points->head->point->dim); + list_points_node_int_t* node = cluster->points->head; + while (node != NULL) { + vector_add_inplace_int(cluster->center, *(node->point)); + node = node->next; + } + vector_div_inplace_int(cluster->center, (int_t) cluster->points->size); } void cluster_update_center_fpt(cluster_fpt_t* cluster) { - //TODO + vector_destroy_fpt(cluster->center); + cluster->center = vector_create_fpt(cluster->points->head->point->dim); + list_points_node_fpt_t* node = cluster->points->head; + while (node != NULL) { + vector_add_inplace_fpt(cluster->center, *(node->point)); + node = node->next; + } + vector_div_inplace_fpt(cluster->center, (fpt_t) cluster->points->size); } void cluster_reset_int(cluster_int_t* cluster) { - //TODO list_points_destroy_int(cluster->points, false); cluster->points = list_points_create_int(); } void cluster_reset_fpt(cluster_fpt_t* cluster) { - //TODO list_points_destroy_fpt(cluster->points, false); cluster->points = list_points_create_fpt(); } -- GitLab