Triangulation de Delaunay itérative Stefanie Hahmann • Algorithme

Triangulation de Delaunay it´erative
Stefanie Hahmann
Algorithme
Pour simplifier l’algorithme on commencera par la triangulation du rectangle de sommets (0,0), (0,500),
(500,500), (500,0), compos´ee de deux triangles adjacents. On supposera que les points ins´er´es se trouvent
tous `a l’inerieur de ce rectangle (`a v´erifier lors de la lecture du fichier d’entr´ee). On obtiendra donc une
triangulation, dont l’enveloppe convexe est ce rectangle.
Un algorithme incr´emental est propos´e en annexe A. A partir de la triangulation de d´epart DT4des 4
sommets du rectangle, on ins`ere un `a un les nouveaux points (sites) dans la triangulation. L’algorithme
calcule, `a partir de la triangulation de Delaunay DTkdes kpoints p0,· · · , pk1d´ej`a ins´er´es, la triangulation
de Delaunay DTk+1 obtenue apr`es l’insertion du point pk, en changeant localement la triangulation DTk.
Tests
Pour tester le programme, on utilisera des donn´ees al´eatoires g´en´er´ees avec la routine drand48. C’est une
routine standard C, qui peut ˆetre utilis´ee comme montr´e en annexe D.
Essayez en plus de trouver des cas int´eressants, pathologiques,...
1
ANNEXE A: Algorithme
Triangulation de Delaunay en 2D - M´ethode incr´ementale
Structure de donn´ees propos´ee
TRIANGLE : sommet *p1, *p2, *p3; /* sommets*/
triangle *t1, *t2, *t3; /* voisins */
(´eventuellement en plus:
point m; /* centre du cercle circonscrit */
double r; /* rayon de ce cercle */ )
POINT : double x, y; /* coordonn´ees */
Les indices des points et des triangles voisins sont li´es de la fa¸con suivante:
t1
t2
t3
p3
p1
p2
Les triangles ont tous la mˆeme orientation.
Dans la suite on d´ecrit un algorithme permettant d’ins´erer un point `a une triangulation de Delaunay d´ej`a
existante. On suppose que le point `a ins´erer se trouve dans l’enveloppe convexe des points introduits auparavant.
Algorithme
Input: DTlet le nouveau point pl.
Output: DTl+1
Proc´edure:
1. eterminer le triangle Ti, dans lequel se trouve le point pl(parcourir toute la triangulation.)
2. determiner DTL ( pl, Ti, DT L )
determiner NTL ( pl, DT L, N T L )
supprimer les triangles DT L de la triangulation DTl.
3. Rajouter pl`a la liste des points de la triangulation.
L’algorithme a besoin de deux listes importantes:
-NT L : Liste des triangles, qui seront rajout´es `a la triangulation DTl.
-DT L : Liste des triangles, qui seront effac´es de la triangulation DTl.
On va maintenant voir en d´etail les deux proedures:
proedure: determiner DTL
Input: ppoint `a rajouter
Titriangle, qui contient p
Output: DT L liste des triangles `a effacer
Proc´edure:
1. Rajouter Ti`a la liste DT L
2. FOR j=0 TO 2DO
IF Tij/DT L THEN
IF p`a l’inerieur du cercle circonscrit `a TijTHEN
determiner DTL( p, Tij, DT L) /* appel r´ecursif */
2
La proc´edure determiner DTL determine tous les triangles, dont le cercle circonscrit contient le point p. C’est
un algorithme r´ecursif, qui se termine car pest introduit dans un domaine connexe.
Triangles DTL
proedure: determiner NTL
Input: ppoint `a rajouter
DT L liste des triangles non valables et `a effacer
Output: NT L liste des triangles `a ins´erer dans la triangulation
Proedure:
FORALL TiDT L DO BEGIN
FOR j=0 TO 2DO BEGIN
IF Tij== THEN BEGIN
Cr´eer un nouveau triangle Tlde sommet pet d’arˆete kij(arˆete commune aux triangles Tiet Tij).
Rajouter Tl`a la liste N T L
END
ELSE IF Tij/DT L THEN BEGIN
Cr´eer un triangle Tlde sommet pet d’arˆete kij
´etablir l’adjacence entre Tlet Tij
Rajouter Tl`a la liste N T L
END
END
FORALL Tk,TlNT L (k6=l)DO
mettre `a jour si il y a lieu l’adjacence entre Tlet Tk
END
Triangles NTL
3
ANNEXE B: Format du fichier d’entr´ee
Le fichier d’entr´ee est un fichier ascii contenant la liste des coordonn´ees des sites:
x0 y0
x1 y1
. .
. .
. .
Attention: Toutes les coordonn´ees seront comprises entre 0. et 500.
ANNEXE C: Format du fichier de sortie
Le fichier de sortie est au format ascii, et contient des commandes en langage encapsulated-postscript,
repr´esentant la triangulation de Delaunay des sites donn´es en entr´ee. Son format est le suivant:
%!PS-Adobe-2.0 EPSF-1.2
%%BoundingBox: xmin ymin xmax ymax
% xmin, ymin, xmax, ymax represente la bounding-box
% englobant les donnees
% debut d’une ligne segmentee
x y moveto
x y lineto
.
.
.
x y lineto
stroke
% fin d’une ligne segmentee
% debut d’une ligne segmentee
x y moveto
x y lineto
.
.
.
x y lineto
stroke
% fin d’une ligne segmentee
showpage
Exemple d’un tel fichier:
%!PS-Adobe-2.0 EPSF-1.2
%%BoundingBox: 10 10 300 450
% debut d’une ligne segmentee
10 10 moveto
300 200 lineto
200 100 lineto
stroke
% fin d’une ligne segmentee
% debut d’une ligne segmentee
4
100 100 moveto
10 450 lineto
300 20 lineto
stroke
% fin d’une ligne segmentee
showpage
Ce fichier peut ˆetre visualis´e grˆace `a la commande
ghostview <nom de fichier >
ANNEXE D: Donn´ees d’entr´ee al´eatoires
Pour g´en´erer des fichiers d’entr´ee al´eatoires, on utilisera les fonctions suivantes dans le programme:
#include <time.h>
#include <math.h>
.
.
.
/* Initialisation de la serie aleatoire */
srand48((long) time(0));
printf("%lf %lf ", drand48( ), drand48( ));
.
.
.
ANNEXE E: Litt´erature: voir cours
5
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !