/*************************************/
/* Auteur : Rémi Synave */
/* Date de création : 03/04/07 */
/* Date de modification : 18/09/16 */
/* 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 HASH_QUALITY__H
#define HASH_QUALITY__H
#include
#include
#include
#include
#include "util.h"
#include "vector.h"
#include "point.h"
#include "vertex.h"
#include "face.h"
#include "model.h"
#include "skeleton.h"
#include "matrix.h"
#include "geometry.h"
#include "hashtable.h"
#include "topology.h"
#define NO_SAMPLING 0
#define SAMPLING 1
/**
Calcul de l'erreur mean ratio metric sur un modèle pour une face
@param m le modèle
@param numface numéro de la face à évaluer
@return évaluation de la face
*/
double a2ri_vf_mean_ratio_metric_for_a_face (
const vf_model * const m,
int numface);
/**
Calcul de l'erreur mean ratio metric sur un modèle complet
@param m le modèle
@return évaluation du modèle
*/
double a2ri_vf_mean_ratio_metric (
const vf_model * const m);
/**
Calcule la liste des angles des triangles composant le modèle
@param m le modèle
@param list pointeur sur le tableau contenant la liste des angles
@param size pointeur sur la taille du tableau
@return aucun
*/
void a2ri_vf_list_angle (
const vf_model * const m,
double ** list,
int * size);
/**
Calcule la liste des aires des triangles composant le modèle
@param m le modèle
@param list pointeur sur le tableau contenant la liste des aires
@param size pointeur sur la taille du tableau
@return aucun
*/
void a2ri_vf_list_area (
const vf_model * const m,
double ** list,
int * size);
/**
Calcule la liste des valences des sommets composant le modèle
@param m le modèle
@param list pointeur sur le tableau contenant la liste des valences
@param size pointeur sur la taille du tableau
@return aucun
*/
void a2ri_vf_list_valence (
const vf_model * const m,
int ** list,
int * size);
/**
Calcule la liste des longueurs des aretes composant le modèle
@param m le modèle
@param list pointeur sur le tableau contenant la liste des longueurs des aretes
@param size pointeur sur la taille du tableau
@return aucun
*/
//On ne peut pas garantir le const du vf_model ici
void a2ri_vf_list_edge_length (
vf_model * m,
double ** list,
int * size);
/**
Calcule la liste des longueurs des hauteurs des triangles composant le modèle
@param m le modèle
@param list pointeur sur le tableau contenant la liste des hauteurs
@param size pointeur sur la taille du tableau
@return aucun
*/
//On ne peut pas garantir le const du vf_model ici
void a2ri_vf_list_height_length (
vf_model * m,
double ** list,
int * size);
/**
Compte le nombre d'angles du modèle par intervalle de 10 degres
@param m le modèle
@return un tableau de 18 entiers contenant le nombre d'angle compris entre 0-10, 10-20, ... , 170-180
*/
int * a2ri_vf_angle_measure (
const vf_model * const m);
/**
Calcul de l'erreur de Hausdorff
@param m1 premier modèle
@param m2 second modèle
@param sampling SAMPLING ou NO_SAMPLING
indique s'il faut ou non échantillonner les faces.
@return erreur de Hausdorff
*/
double a2ri_vf_hausdorff (
const vf_model * const m1,
const vf_model * const m2,
int sampling);
/**
Calcul de la distance entre un point et un ensemble de points en se basant sur la métrique Point-Point
@param p le point
@param points tableau de réel contenant les coordoonées des sommets du maillage
@param size taille du tableau
@return distance entre le point et le modèle
*/
double DPP (
const point3d *const p,
const point3d * const points,
int size);
/**
calcul de l'erreur moyenne "Emean" entre deux modèles
@param m1 le premier modèle
@param m2 le second modèle
@param sampling SAMPLING ou NO_SAMPLING
indique s'il faut ou non échantillonner les faces.
@return l'erreur "Emean"
*/
double a2ri_vf_Emn_DPP (
const vf_model * const m1,
const vf_model * const m2,
int sampling);
/**
Evaluation de l'aspect ratio d'un triangle
@param m le modèle
@param numface numéro de la face à évaluer
@return évaluation de l'aspect ratio
*/
double a2ri_vf_triangle_aspect_ratio (
const vf_model * const m,
int numface);
/**
Evaluation de la qualité d'une face d'un triangle avec la méthode de Rypl
@param m le modèle
@param numface numéro de la face à évaluer
@return évaluation de l'aspect ratio
*/
double a2ri_vf_triangle_rypl (
const vf_model * const m,
int numface);
/**
Calcul de la liste d'aspect ratio d'un modèle
@param m le modèle
@param list pointeur sur un tableau contenant tous les aspect ratio des triangles composant le modèle
@param siuze pointeur sur la taille du tableau
@return aucun
*/
void a2ri_vf_list_triangle_aspect_ratio (
const vf_model * const m,
double ** list,
int *size);
/**
Calcul de la variation de taille (d'aire) entre deux faces du modèle
@param m le modèle
@param face1 numéro de la première face servant de base
@param face2 numéro de la seconde face
@return variation de la taille : Aire_face1/Aire_face2
*/
double a2ri_vf_face_size_variation (
const vf_model * const m,
int face1,
int face2);
/**
Calcul de la liste des rayons des cercles inscrit aux faces du modèles
@param m le modèle
@param list pointeur sur le tableau contenant la liste des rayons des cercles inscrits
@param size pointeur sur la taille du tableau
@return aucun
*/
void a2ri_vf_list_radius_incircle (
const vf_model * const m,
double ** list,
int * size);
/**
Calcul de la courbure de gauss pour un sommet
@param m le modele
@param ve numéro du sommet
@return le courbure de gauss en ce sommet
*/
double a2ri_vf_gauss_curvature (
const vf_model * const m,
int ve);
/**
Calcul de la courbure de gauss pour une liste de sommet
@param m le modele
@param ve liste de sommets
@param size taille de la liste
@param list liste des courbures associés à chaque sommet
@return aucun
*/
void a2ri_vf_gauss_curvature_list_of_vertex (
const vf_model * const m,
const int * const ve,
int size,
double ** list);
/**
Calcul de la mean curvature pour une arete
@param m le modele
@param ve1 premier sommet de l'arete
@param ve2 second sommet de l'arete
@return la mean curvature pour cette arete
*/
vector3d a2ri_vf_mean_curvature (
const vf_model * const m,
int ve1,
int ve2);
/**
Calcul de la mean curvature pour un chemin
@param m le modele
@param list chemin décrit par ses sommets
@param size taille du tableau list
@param list_vector liste des vector3d retourner pour chaque arete
@param size_list_vector taille de la liste list_vector
@return aucun
*/
void a2ri_vf_mean_curvature_path (
const vf_model * const m,
const int * const list,
int size,
vector3d ** list_vector,
int * size_list_vector);
/**
Calcul de la courbure de Levi-Civita
@param m le modele
@param numve numéro du sommet
@return la courbure de Levi-Civita
*/
double a2ri_vf_levi_civita (
const vf_model * const m,
int numve);
/**
Calcul de la courbure de Levi-Civita
@param m le modele
@param numve numéro du sommet
@return la courbure de Levi-Civita
*/
void a2ri_vf_levi_civita_list_of_vertex (
const vf_model * const m,
const int * const ve,
int size,
double ** list);
/**
Calcul des courbures avec la méthode garimella
@param m le modele
@param numve numéro du sommet
@param K gaussian curvature
@param H mean curvature
@return aucun
**/
void a2ri_vf_garimella (
const vf_model * const m,
int numve,
double * K,
double * H);
/**
Calcul de la précision, justesse d'un squelette par rapport à un modèle numérique
@param m le modèle
@param s le squelette
@return un nombre définissant la précision du squelette par rapport au modèle. Plus ce nombre sera élevé, moins le squelette sera ajusté au modèle.
**/
int a2ri_vf_model_skeleton_accuracy(
const vf_model * const m,
const skeleton * const s);
#endif