AlgoGuskov Class Reference

Algorithme de Guskov. More...

#include <AlgoGuskov.hh>

List of all members.

Public Member Functions

 AlgoGuskov ()
 Constructeur.
void init_mesh (OriginalMesh &m)
 initialiser le mesh en ajoutant des propiétés
std::vector< Seedcreate_seeds (const unsigned int n, const OriginalMesh &m)
 Créer une liste de n noueds tirés au hazard du mesh.
void run_chartification (OriginalMesh &m, vector< Seed > &seed_list, vector< Tile * > &tiles)
 Exécuter l'algorithme de chartification.
void create_base_mesh (OriginalMesh &m, vector< Tile * > &tiles, OriginalMesh &base_mesh)
 Créer le base mesh.
void initial_parameterization (OriginalMesh &orig_mesh, OriginalMesh const &base_mesh, vector< Tile * > const &tiles)
 Calculer la parametrisation initiale.
void run_resampling (OriginalMesh &m, vector< Tile * > &tiles, OriginalMesh &base_mesh, OriginalMesh &result_mesh)
 Exécuter le "Resampling".
Accès aux paramètres de l'algorithme
void set_max_normal_error (double error)
double get_max_normal_error () const
void set_cubic_spline_delta (unsigned int which_delta, double value)
double get_cubic_spline_delta (unsigned int which_delta) const
void set_resampling_level (unsigned int level)
unsigned int get_resampling_level () const
void set_mapping_parameter_h (unsigned int h)
unsigned int get_mapping_parameter_h () const

Private Member Functions

std::vector< OriginalMesh::Normal > get_face_normal (OriginalMesh &result_mesh, OriginalMesh::VertexHandle v)
 index du base mesh triangle dans "one-ring" autour de vApplication d'un point dans le "one-ring" de b dans la région planareobtenir les normals diffirante de chaque face adjacente pour un sommet
Fonctions d'aide pour la chartification
bool condition_EB (vector< Tile * > &tiles, Vertex &v, OriginalMesh &m)
bool condition_NZ (vector< Tile * > &tiles, Vertex &v, OriginalMesh &m)
bool condition_MB (vector< Tile * > &tiles, Vertex &v, OriginalMesh &m)
bool condition_MN (vector< Tile * > &tiles, Vertex &v, OriginalMesh &m)
bool check_normal_error (vector< Tile * > &tiles, Vertex &v, OriginalMesh &m, OpenMesh::VPropHandleT< unsigned int > &vprop_tile)
Fonctions d'aide pour les pas "Resampling" et Optimisation
double calculate_cubic_spline (const double r) const
 Calcule "smooth cubic spline" beta(r) (Guskov, p.14).
double metric_space_dist (OriginalMesh::Point const &s, OriginalMesh::Point const &b1, OriginalMesh::Point const &b2, OriginalMesh::Point const &b3) const
 Calcule la distance entre s et b1 dans l'espace métrique défini dans Guskov, p. 13.
OriginalMesh::Point blending (OriginalMesh &m, const vector< Tile * > &tiles, const OriginalMesh &base_mesh, const OriginalMesh::Point s, const OriginalMesh::FaceHandle base_face1, const OriginalMesh::FaceHandle second_base_face)
 Calcul le nouveau ("blended", "resampled") point.
bool triangle_in_D (const OriginalMesh &m, const unsigned int tile_id, const Vertex vertices[3], vector< Tile * > tiles) const
 Vérifier si un triangle de noeuds du mesh original se trouve complétement dans une carte planaire.
Fonctions d'aide pour l'optimisation
void optimize_vertex_find_region_interior (OriginalMesh &om, const OriginalMesh &bm, Tile &cur_tile, const OpenMesh::VPropHandleT< double > &vprop_distance, vector< OriginalMesh::Point > &ret_region, Vertex &boundary_start_vertex)
 Trouver sommets sur le maillage de départ qui se trouvent dans "base vertex region".
void optimize_vertex_region (OriginalMesh &om, OriginalMesh &bm, vector< Tile * > &tiles)
 Optimisation 2: "base vertex optimisation".

Private Attributes

double max_normal_error
 Erreur normale maximale d'une région pendant la phase de chartification.
vector< Vertexseed_list
 Liste de seeds autour desquels les régions seront créées.
double delta_cubic_spline [2]
 Les deux paramètres pour le cubic spline (Guskov, p. 14).
unsigned int resampling_level
 Level de resampling.
unsigned int mapping_parameter_h
 Remeshing parameter pour l'application planaire.


Detailed Description

Algorithme de Guskov.

Contient toute la fonctionnalité de l'algorithme.

Les fonctions sont groupées dans plusieurs fichiers .cc par rapport de leurs fonctionnalités.


Constructor & Destructor Documentation

AlgoGuskov::AlgoGuskov (  )  [inline]

Constructeur.

NOT IMPLEMENTED


Member Function Documentation

std::vector< OriginalMesh::Normal > AlgoGuskov::get_face_normal ( OriginalMesh result_mesh,
OriginalMesh::VertexHandle  v 
) [private]

index du base mesh triangle dans "one-ring" autour de vApplication d'un point dans le "one-ring" de b dans la région planareobtenir les normals diffirante de chaque face adjacente pour un sommet

Parcourir les faces adjacentes au sommet v et retourner la differente normal de chaque face

Parameters:
result_mesh le mesh cree par base mesh
v centre du "one-ring"
Returns:
un vector des normals

bool AlgoGuskov::condition_EB ( vector< Tile * > &  tiles,
Vertex v,
OriginalMesh m 
) [private]

Vérifie que la condition EB est satisfaite pour toutes les régions.

Parameters:
tiles vecteur contenant toutes les régions en forme de Tile
v si la condition n'est pas satisfaite v contiendra un noeud choisi à devenir seed dans l'itération suivante
m le mesh
See also:
Tile::check_conditions_EB

bool AlgoGuskov::condition_NZ ( vector< Tile * > &  tiles,
Vertex v,
OriginalMesh m 
) [private]

Vérifie que la condition NZ est satisfaite pour toutes les régions.

See also:
condtion_EB

Tile::check_conditions_NZ

bool AlgoGuskov::condition_MB ( vector< Tile * > &  tiles,
Vertex v,
OriginalMesh m 
) [private]

Vérifie que la condition MB est satisfaite pour toutes les régions.

See also:
condtion_EB

Tile::check_conditions_MB

bool AlgoGuskov::condition_MN ( vector< Tile * > &  tiles,
Vertex v,
OriginalMesh m 
) [private]

Vérifie que la condition MN est satisfaite pour toutes les régions.

See also:
condtion_EB

Tile::check_conditions_MN

bool AlgoGuskov::check_normal_error ( vector< Tile * > &  tiles,
Vertex v,
OriginalMesh m,
OpenMesh::VPropHandleT< unsigned int > &  vprop_tile 
) [private]

Vérifie pour chaque Tile que l'erreur normale est inférieur à une borne

Parameters:
tiles vecteur contenant toutes les régions en forme de Tile
v si cette condition n'est pas satisfaite v contiendra un noeud choisi à devenir seed dans l'itération suivante
m le mesh
vprop_tile id de la propiété attribué aux noeuds indiquant la région à laquelle ils appartiennent
See also:
max_normal_error

Tile::calculate_error

double AlgoGuskov::calculate_cubic_spline ( const double  r  )  const [private]

Calcule "smooth cubic spline" beta(r) (Guskov, p.14).

double AlgoGuskov::metric_space_dist ( OriginalMesh::Point const &  s,
OriginalMesh::Point const &  b1,
OriginalMesh::Point const &  b2,
OriginalMesh::Point const &  b3 
) const [private]

Calcule la distance entre s et b1 dans l'espace métrique défini dans Guskov, p. 13.

Parameters:
s point sur le base mesh pour lequel la distance sera calculée
b1 coordonée du premier noeud du base mesh
b2 coordonée du 2ieme noeud du base mesh
b3 coordonée du 3ieme noeud du base mesh
Precondition:
Ne fonctionne que dans le cas où s est dans le triangle défini par b1,b2,b3
Returns:
metric space distance entre s et b1

OriginalMesh::Point AlgoGuskov::blending ( OriginalMesh m,
const vector< Tile * > &  tiles,
const OriginalMesh base_mesh,
const OriginalMesh::Point  s,
const OriginalMesh::FaceHandle  base_face1,
const OriginalMesh::FaceHandle  second_base_face 
) [private]

Calcul le nouveau ("blended", "resampled") point.

Parameters:
m Le mesh original
tiles Les régions de Voronoi
base_mesh Le base mesh crée à partir du mesh original et les régions de Voronoi
s point sur le base mesh
base_face1 face handle du triangle englobant le point s
second_base_face face handle du deuxieme triangle si s se trouve sur la frontière entre deux triangle
Returns:
Retourne le "resampled" point de s

bool AlgoGuskov::triangle_in_D ( const OriginalMesh m,
const unsigned int  tile_id,
const Vertex  vertices[3],
vector< Tile * >  tiles 
) const [private]

Vérifier si un triangle de noeuds du mesh original se trouve complétement dans une carte planaire.

Fait simplification: triangle est dans D s'il est dans la région correspondante au base vertex courant où une des régions voisines

Parameters:
m Le mesh original
tile_id L'index de la région (égal à l'index du base vertex correspondant)
vertices Triangle de noeuds sur le mesh original
tiles Les régions sur le maillage de départ
Returns:
vrai ssi le trois vertices peuvent être appliqués à l'intérieur de la carte planaire indiquée par tile_id

void AlgoGuskov::optimize_vertex_find_region_interior ( OriginalMesh om,
const OriginalMesh bm,
Tile cur_tile,
const OpenMesh::VPropHandleT< double > &  vprop_distance,
vector< OriginalMesh::Point > &  ret_region,
Vertex boundary_start_vertex 
) [private]

Trouver sommets sur le maillage de départ qui se trouvent dans "base vertex region".

Pour une base vertex donné cette fonction devrait trouver les sommets du maillage de départ qui se trouvent dans une région appelée base vertex region par Guskov

NOT IMPLEMENTED!

void AlgoGuskov::optimize_vertex_region ( OriginalMesh om,
OriginalMesh bm,
vector< Tile * > &  tiles 
) [private]

Optimisation 2: "base vertex optimisation".

NOT IMPLEMENTED

void AlgoGuskov::set_max_normal_error ( double  error  )  [inline]

Mettre l'erreur normale maximale

See also:
max_normal_error

double AlgoGuskov::get_max_normal_error (  )  const [inline]

Obtenir l'erreur normale maximale

See also:
max_normal_error

void AlgoGuskov::set_cubic_spline_delta ( unsigned int  which_delta,
double  value 
) [inline]

Mettre un des deux paramètres du cubic spline (delta)

Parameters:
which_delta Valeur 0 ou 1, accès au delta0 ou delta1
value nouvelle valeur de delta
See also:
delta_cubic_spline

double AlgoGuskov::get_cubic_spline_delta ( unsigned int  which_delta  )  const [inline]

Obtenir delta

See also:
delta_cubic_spline

void AlgoGuskov::set_resampling_level ( unsigned int  level  )  [inline]

Mettre le level de "Resampling3

See also:
resampling_level

unsigned int AlgoGuskov::get_resampling_level (  )  const [inline]

Obtenir le level courant de "Resampling"

See also:
resampling_level

void AlgoGuskov::set_mapping_parameter_h ( unsigned int  h  )  [inline]

Mettre le paramètre de l'application planaire

See also:
mapping_parameter_h

unsigned int AlgoGuskov::get_mapping_parameter_h (  )  const [inline]

Obtenir le paramètre de l'application planaire

See also:
mapping_parameter_h

void AlgoGuskov::init_mesh ( OriginalMesh m  ) 

initialiser le mesh en ajoutant des propiétés

std::vector< Seed > AlgoGuskov::create_seeds ( const unsigned int  n,
const OriginalMesh m 
)

Créer une liste de n noueds tirés au hazard du mesh.

Noeuds obtenus en divisant l'ensemble de noeuds {1,..., max} en n sous-ensembles: {1... max/n}, {max/n + 1 ... 2max/n} ... { (n-1)/n * max + 1 ... max} et choisir par hazard un noeud dans chacun de ces sous-ensembles.

void AlgoGuskov::run_chartification ( OriginalMesh m,
vector< Seed > &  seed_list,
vector< Tile * > &  tiles 
)

Exécuter l'algorithme de chartification.

Exécuter l'algorithme comme décrit dans le papier de Guskov en construisant l'ensemble de régions de Voronoi

Parameters:
m mesh sur lequel la chartification doit être exécuté
seed_list liste de seeds à partir de lesquels on commençe la chartification
tiles valeur de retour qui contiendra la liste des Tiles crées

void AlgoGuskov::create_base_mesh ( OriginalMesh m,
vector< Tile * > &  tiles,
OriginalMesh base_mesh 
)

Créer le base mesh.

Parcourir les seeds et les ajouter dans le base mesh pour chaque seed, créer les faces adjacentes avec les autres seeds sur "one-ring"

Precondition:
les régions de Voronoi(après verifier tous les conditions) sont déjà créées
Postcondition:
il existe une property pour chaque sommet dans base_mesh qui donne l'id de tile associé
Parameters:
m maillage originale
tiles liste des tiles
base_mesh maillage de base

void AlgoGuskov::initial_parameterization ( OriginalMesh orig_mesh,
OriginalMesh const &  base_mesh,
vector< Tile * > const &  tiles 
)

Calculer la parametrisation initiale.

Parcourir les tiles et créer une premiere parametrisation. Ceci est faite en exploitant la correspondance entre les Voronoi tiles sur le maillage original et le maillage de base. Les coordonées moyennes sont calculées pour chaque sommet par rapport à ces voisins. Pour les sommets qui sont à côté du frontière avec les autres tiles, des points voisins sur le frontière sont calculés. Pour ces points, on trouve des points correspondants sur le base mesh, qui sont ensuite mappés dans R^2. Les points ainsi obtenu servent comme des conditions à bord pour résoudre le problème de "mean-value parametrization". Ceci entraine formuler le système et résoudre un système linéaire dont le matrice est assemblé avec les coordonnées moyennes et le second membre avec les points dans R^2 correspondants au points sur le bord. Le système est résolu avec le méthode de Gradients Bi-Conjugés (BiCGS), implementé parWilly Dorfler

Precondition:
la maillage de base est déjà crée
Postcondition:
il existe une property pour chaque vertice dans orig_mesh qui donne la parametrisation
Parameters:
orig_mesh maillage originale
base_mesh maillage de base
tiles liste des tiles

void AlgoGuskov::run_resampling ( OriginalMesh m,
vector< Tile * > &  tiles,
OriginalMesh base_mesh,
OriginalMesh result_mesh 
)

Exécuter le "Resampling".

Le niveau controlle la densité du point de la face. A chaque niveau, pour ajouter les points-échantillons et créer le nouveau mesh selon le base_mesh on déchire chaque face à 4 sous_faces par ajouter les trois sommets medians sur le bords Repositionner les points-échantillons avec le nouvelle posision du point-échantillon que la fonction "blending" donne

Parameters:
m Le mesh original
tiles Les régions de Voronoi
base_mesh Le base mesh crée à partir du mesh original et les régions de Voronoi
result_mesh Le nouveau mesh crée par resampling


Member Data Documentation

double AlgoGuskov::max_normal_error [private]

Erreur normale maximale d'une région pendant la phase de chartification.

Valeur maximale pour l'erreur normale (Guskov, p. 9). Si l'erreur pour une région est plus grande on ajoute un nouveau seed adjacent à l'ancien.

vector<Vertex> AlgoGuskov::seed_list [private]

Liste de seeds autour desquels les régions seront créées.

double AlgoGuskov::delta_cubic_spline[2] [private]

Les deux paramètres pour le cubic spline (Guskov, p. 14).

unsigned int AlgoGuskov::resampling_level [private]

Level de resampling.

unsigned int AlgoGuskov::mapping_parameter_h [private]

Remeshing parameter pour l'application planaire.

Doit être {0 = normal polar map, 1 = better triangle area distribution} remeshing parameter (Guskov, p.12)


The documentation for this class was generated from the following files:
Generated on Fri Jun 15 17:25:00 2007 for GuskovRemeshing by  doxygen 1.5.2