diff --git a/src/cluster.c b/src/cluster.c index 939ae5ce1ab29fb8b7ea9a9a2b96cb9e60fa702e..f1b2c276129e5084a3c6026b9aa98b8036c27c53 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(); }