This repository has been archived on 2023-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
GINPA/Modele/agglo.h

69 lines
2.1 KiB
C

#pragma once
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <math.h>
#include "../Headers/structures.h"
#include "calcul.h"
#define VMIN 0.7 /* La vitesse (en m.s^-1) considérée minimum d'une
personne se déplaçant à un endroit */
#define MARGE 0.8 /*Marge d'erreur par rapport à la vitesse ci-dessus. Permet
d'écarter les cas où la personne ralentit pour une raison quelconque*/
#define PERIODEMAX 120 /*Temps MAX entre les logs où l'on considère que les
données sont encore exploitables*/
#define DUREEMINI 180 /*Durée minimum d'un agglomérat*/
#define DIFTMINI 120 /*Différence de temps minimum entre deux agglomérats*/
#define DISTMINI 100 /*Distance minimum entre deux agglomérats*/
/**
* @brief Initialise un Agglomerat
*
* Initialise le champ agglo de l'agglomérat avec les adresses des Point contenus
* dans pts
*
* @param a L'agglomerat initialisé
* @param pts Tableau contenant les points qui seront stockés dans l'agglomérat
* @param taille Taille du tableau pts
*
* @return Retourne une valeur d'erreur définie dans 'strucutres.h'
*/
ErrEnum initAgglo(Agglomerat*,Point* ,uint32_t);
/**
* @brief Libère la mémoire prise par le tableau de pointeurs sur points de
* l'agglomérat
*
* @param a L'agglomérat où on libère la mémoire
*
* @return Procédure
*/
void libereAgglo(Agglomerat *const);
/**
* @brief Fusionne deux agglomérats
*
* Mets les points des deux agglomérats dans un même en gardant l'ordre
* chronologique
*
* @param a1 Premier agglomérat
* @param a2 Deuxième agglomérat
*
* @return Résultat de la fusion des deux agglomérat. La structure est remplie de 0
* en cas d'échec.
*/
Agglomerat fusionAgglo(Agglomerat const* const, Agglomerat const* const);
/**
* @brief Retourne l'écart de temps entre les deux agglomérats
*
* Il n'est pas nécessaire que les agglomérats soient donnés dans l'ordre
* chronologique
*
* @param a1 Premier agglomérat
* @param a2 Deuxième agglomérat
*
* @return L'écart de temps entre les deux agglomérats
*/
uint32_t ecartTemps(Agglomerat const* const, Agglomerat const* const);
ErrEnum repereAgglo(Point*, uint32_t, Agglomerat**, uint32_t*);