125 lines
4.3 KiB
C
125 lines
4.3 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"
|
|
|
|
/** @def VMIN
|
|
* @brief La vitesse (en m.s^-1) considérée minimum d'une personne se déplaçant à un endroit.*/
|
|
#define VMIN 0.7
|
|
/** @def MARGE
|
|
* @brief Marge d'erreur par rapport à la vitesse ci-dessus. Permet d'écarter les cas où la personne ralentit pour une raison quelconque.*/
|
|
#define MARGE 0.8
|
|
/** @def PERIODEMAX
|
|
* @brief Temps MAX entre les logs où l'on considère que les données sont encore exploitables. */
|
|
#define PERIODEMAX 120
|
|
/** @def DUREEMINI
|
|
* @brief Durée minimum d'un agglomérat.*/
|
|
#define DUREEMINI 180
|
|
/** @def DIFTMINI
|
|
* @brief Différence de temps minimum entre deux agglomérats.*/
|
|
#define DIFTMINI 120
|
|
/** @def DISTMINI
|
|
* @brief Distance minimum entre deux agglomérats. */
|
|
#define DISTMINI 100
|
|
|
|
|
|
/**
|
|
* @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* a,Point* pts, uint32_t taille);
|
|
|
|
/**
|
|
* @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 Valeur d'erreur ou de succes définies dans structures.h
|
|
*/
|
|
void libereAgglo(Agglomerat *const a);
|
|
|
|
/**
|
|
* @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 a1, Agglomerat const* const a2);
|
|
|
|
/**
|
|
* @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 a1, Agglomerat const* const a2);
|
|
|
|
/**
|
|
* @brief Repère les agglomérats à partir d'un tableau de points
|
|
*
|
|
* @param points Tableau de points servant au repérage des agglomérats
|
|
* @param tailleP Taille du tableau de points
|
|
* @param agglos Adresse du tableau qui contiendra les agglomérats repérés
|
|
* @param tailleA Adresse de la variable qui contiendra la taille du tableau d'agglomérats
|
|
*
|
|
* @return Valeur d'erreur ou de succes définies dans structures.h
|
|
*/
|
|
ErrEnum repereAgglo(Point* points, uint32_t tailleP, Agglomerat** agglos, uint32_t* tailleA);
|
|
|
|
/**
|
|
* @brief Assemble les agglomérats en aglomérats globaux.
|
|
*
|
|
* Assemble les agglomérats se chevauchants dans l'espace dans une strucutre de type AgglomeratGlobal.
|
|
* Le tableau d'agglomérats globaux se déclare par la fonction appelante et s'utilise comme la
|
|
* structure Agglomerat.
|
|
*
|
|
* @param tabAgglo Tableau des agglos qui seront assemblés
|
|
* @param tailleA Taille du tableau des agglos
|
|
* @param tabAggloGlobal Adresse du tableau qui contiendra les agglomérats assemblés.
|
|
* @param tailleAGlobal Taille du tableau d'agglomerats globaux. Cette valeur est initialisé dans cette fonction.
|
|
*
|
|
* @return Valeur d'erreur ou de succes définies dans structures.h
|
|
*/
|
|
ErrEnum assemblageGlobalAgglo(Agglomerat *tabAgglo, const uint32_t tailleA, AgglomeratGlobal **tabAggloGlobal, uint32_t *tailleAGlobal);
|
|
|
|
/**
|
|
* @brief Fait pointer les agglomérats sur les routes associés si cela est possible.
|
|
*
|
|
* Cette fonction se base entièrement sur le pointage déjà étable des routes sur Agglo.
|
|
* /!\ L'APPEL A CETTE FONCTION DEVRA ETRE FORCEMENT PRECEDE D'UN APPEL A pointageSurAgglo() /!\
|
|
*
|
|
* @param tabAgglo Tableau des agglomérats. Va être modifié pour remplir le champ ptRoute[]
|
|
* @param tailleA Taille du tableau d'agglomérats.
|
|
* @param tabRoute Tableau des routes
|
|
* @param tailleR Taille du tableau de routes
|
|
* @return Valeur d'erreur. SUCCESS si réussite.
|
|
*/
|
|
ErrEnum pointageSurRoute(Agglomerat *tabAgglo, const uint32_t tailleA, Route *tabRoute, const uint32_t tailleR);
|