94 lines
3.1 KiB
C
94 lines
3.1 KiB
C
#pragma once
|
||
|
||
#include <math.h>
|
||
|
||
#include "../Headers/structures.h"
|
||
|
||
/** @def PI
|
||
* @brief La fameuse constante mystère !*/
|
||
#define PI 3.14159265358979323846
|
||
|
||
/** @def RAYON
|
||
* @brief Rayon équatorial de la Terre en mètres.*/
|
||
#define RAYON 6378137
|
||
|
||
#define RADIANS(x) ((x) * PI / 180)
|
||
#define DEGRES(x) ((x) * 180 / PI)
|
||
|
||
|
||
/**
|
||
* @brief Calcule la distance en mètres entre deux coordonnees
|
||
*
|
||
* @param a Premier argument de l'opération
|
||
* @param b Premier argument de l'opération
|
||
* @return Retourne la distance entre les deux coordonnees en mètres
|
||
*/
|
||
double distance(Coordonnees const* const, Coordonnees const* const);
|
||
|
||
/**
|
||
* @brief Redresse en "point Haut-Gauche" et point "Bas-Droite" deux structures données en paramètres représentant deux sommets d'un rectangle.
|
||
*
|
||
* Certaines lignes sont commentées dans le corps de la fonction car ces opérations sont inutiles.
|
||
*
|
||
* @param positionHG Point caractérisant un des quatre sommets du rectangle.
|
||
* @param positionBD Point caractérisant un des quatre sommets du rectangle.
|
||
* @param carre Booléen indiquant si la forme dessinée DOIT être un carré... ou non.
|
||
* @return Procédure.
|
||
*/
|
||
void redresserRectangle(sfVector2f *const positionHG, sfVector2f *const positionBD, const bool carre);
|
||
|
||
/**
|
||
* @brief Détermine le temps écoulé entre deux points (en secondes).
|
||
*
|
||
* @param a Point 1
|
||
* @param b Point 2
|
||
* @return Temps entre les 2 points (toujours positif ou nul)
|
||
*/
|
||
time_t temps(const Point a, const Point b);
|
||
|
||
/**
|
||
* @brief Renvoie le pourcentage de points d'un tableau contenus dans le cercle défini par son centre centre et son rayon rayon.
|
||
*
|
||
* @points Tableau de points dont on vérifie s'ils sont contenus dans le cercle ou non.
|
||
* @taille Taille du tableau points.
|
||
* @centre Centre du cercle mentionné ci-dessus.
|
||
* @rayon Rayon du cercle mentionné ci-dessus.
|
||
*/
|
||
double percentPointsInCercle(Point const * const points, const uint32_t taille, Coordonnees const * const centre, const double rayon);
|
||
|
||
/**
|
||
* @brief Calcule à partir d'un ensemble de points, les coordonnées coins hautGauche
|
||
* et basDroit d'un rectangle qui englobe tous les points
|
||
*
|
||
* @param pts Tableau de points.
|
||
* @param taille Taille du tableau pts.
|
||
* @param hautGauche Pointeur sur les coordonnées du coin hautGauche du rectangle.
|
||
* @param basDroit Pointeur sur les coordonnées du coin basDroit du rectangle.
|
||
* @return Procédure.
|
||
*/
|
||
void getExtrema(Point const* const pts, uint32_t const taille, Coordonnees *const hautGauche, Coordonnees *const basDroit);
|
||
|
||
/**
|
||
* @brief Renvoie un zoom en fonction d'un ratio particulier qui dépend directement de la distance maximale à afficher.
|
||
*
|
||
* @param maxRatio Le ratio en question.
|
||
* @return Le zoom !
|
||
*/
|
||
uint8_t getZoomFromMaxRatio(const double maxRatio);
|
||
|
||
/**
|
||
* @brief Renvoie une échelle en fonction d'un zoom.
|
||
*
|
||
* @param zoom Zoom de la carte (selon GMaps).
|
||
* @return L'échelle' !
|
||
*/
|
||
double getEchelleFromZoom(const uint8_t zoom);
|
||
|
||
/**
|
||
* @brief Calcul le zoom et l'échelle correspondante à notre situation.
|
||
*
|
||
* @param carte Pointeur sur la carte avec laquelle on va calculer le zoom et l'échelle.
|
||
* @return Procédure.
|
||
*/
|
||
void getZoomEchelle(Carte *const carte);
|