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/calcul.h

94 lines
3.1 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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