/*************************************/
/* Auteur : Rémi Synave */
/* Date de création : 25/01/08 */
/* Date de modification : 15/03/15 */
/* Version : 0.4 */
/*************************************/
/***************************************************************************/
/* This file is part of a2ri. */
/* */
/* a2ri is free software: you can redistribute it and/or modify it */
/* under the terms of the GNU Lesser General Public License as published */
/* by the Free Software Foundation, either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* a2ri is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU Lesser General Public License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public */
/* License along with a2ri. */
/* If not, see . */
/***************************************************************************/
#ifndef GEODESIQUE__H
#define GEODESIQUE__H
#include
#include
#include "util.h"
#include "vertex.h"
#include "edge.h"
#include "face.h"
#include "point.h"
#include "model.h"
#include "geometry.h"
#include "hashtable.h"
#include "graph.h"
#include "subdivision.h"
#include "topology.h"
#define A2RI_GEODESIQUE_CHEMIN_INTROUVABLE 0
#define A2RI_GEODESIQUE_POINTS_ALIGNES 1
#define A2RI_GEODESIQUE_OK 2
/**
Calcul du chemin le plus court entre deux sommets du modele
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@return la longueur du chemin
**/
double a2ri_vf_dijkstra (
const vf_model * const m,
int ve_dep,
int ve_fin,
int **list,
int *size);
/**
Calcul d'un chemin entre deux sommets du modele
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@return la longueur du chemin
**/
double a2ri_vf_A_star (
const vf_model * const m,
int ve_dep,
int ve_fin,
int **list,
int *size);
/**
Calcul du chemin le plus court entre deux sommets du modele
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@return la longueur du chemin
**/
double a2ri_vf_approche (
const vf_model * const m,
int ve_dep,
int ve_fin,
int **list,
int *size);
/**
Calcul du chemin le plus court entre deux sommets du modele
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@return la longueur du chemin
**/
double a2ri_vef_dijkstra (
const vef_model * const m,
int ve_dep,
int ve_fin,
int **list,
int *size);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_approche_plan_moyen (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_approche_plan_minmax (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_approche_plan_vecteur (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_approche_plan_intersection (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_A_star_plan_moyen (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_A_star_plan_minmax (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_A_star_plan_vecteur (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_A_star_plan_intersection (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_dijkstra_plan_minmax (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_dijkstra_plan_vecteur (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_dijkstra_plan_intersection (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
/**
Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
@param m le modèle
@param ve_dep sommet de départ
@param ve_fin sommet d'arrivée
@param list liste des sommets parcourus
@param size taille du tableau contenant les sommets parcourus
@param length longueur totale parcouru
@return 1 si un chemin a été créé et trouvé, 0 sinon
**/
int a2ri_vf_geodesic_path_dijkstra_plan_moyen (
vf_model * m,
int ve_dep,
int ve_fin,
int **list,
int *size,
double *length,
int nbsubdiv);
#endif