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

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);