• Aucun résultat trouvé

Algorithme sélectionnant les polygones à conserver

Entrées : S est l’ensemble des polygones Sorties : la base fondamentale minimale de S

suspect ∈ B B ← S

pour tout polygoneT este ∈ S faire

pour tout polygone ∈ S \ {polygoneT este} faire

suspect ← vrai

pour tout p point de polygone faire

si p strictement à l’extérieur de polygoneT este alors

suspect ← faux

fin si fin pour

si suspect alors

suspect ← faux

pour tout ppoint de polygone faire

si p est un sommet de polygoneT este alors

suspect ← vrai

fin si fin pour

si suspect alors

suspect ← faux

pour tout p point de polygone faire

si p strictement à l’intérieur de polygoneT este alors

suspect ← vrai fin si fin pour fin si si suspect alors supprimer polygone de B fin si fin si fin pour fin pour retourner B

(a) Exemple de graphe (b) Premier polygone extrait (c) Deuxième polygone extrait

(d) Troisième polygone extrait (e) Quatrième polygone extrait (f) Cinquième polygone extrait

(g) Sixième polygone extrait (h) Septième polygone extrait

Figure A.3 – Un exemple d’échec de l’algorithme

Notons également que dans le cas où deux polygones se chevauchent, comme dans l’exemple de la figure A.4, l’algorithme conservera les deux. Nous atteignons là la li- mite qu’il y a à assimiler les polygones à des cycles : en effet, dans ce cas, il y a trois polygones à conserver : l’intersection des deux ainsi que l’un privé de l’autre et inver- sement. [O’Rourke, 1998] fournit un algorithme permettant de savoir si deux polygones s’intersectent, ainsi qu’un algorithme permettant de déterminer le point d’intersection de deux segments (à savoir ceux des arêtes qui se coupent). Il est donc possible d’obtenir l’ensemble des points composants deux polygones se chevauchant, ainsi que l’ensemble des segments associés. En appliquant l’algorithme de recherche de polygones à ces don- nées, on obtient les polygones recherchés. Dans notre cas particulier, les polygones sont générés par un outil de maillage. En conséquence, il s’agit de maillages dégénérés, de sorte que l’on est certain qu’il n’y a pas de chevauchement (le graphe est nécessairement planaire).

Figure A.4 – Cas où deux polygones se chevauchent

De même, dans le cas ou un polygone est inclus dans un autre et où l’un de ses sommets au moins est un point d’une arête du polygone dans lequel il est inclus sans toutefois être un sommet de ce polygone, comme dans le cas de la figure A.5, l’algorithme conserve les deux polygones. Ce comportement est souhaitable dans le cadre des cartes de rugosités, ce cas ayant un sens physique. Il y a la même ambiguïté que dans le cas de la figure A.2, qui est levée de la même manière.

Figure A.5 – Cas où un sommet d’un polygone contenu dans un autre touche la frontière mais pas un sommet

Nous avons la proposition suivante :

Proposition A.1.4. La complexité en espace de l’algorithme A.9 est Θ (N).

Démonstration. L’algorithme stocke une fois les polygones détectés (dans l’ensemble S) et une fois les polygones constituants la base fondamentale minimale de l’ensemble S.

Modifier l’algorithme pour qu’il détruise l’ensemble S, ne conservant que l’ensemble B est trivial.

Enfin, soit P le nombre de polygones et S le nombre moyen de sommets des polygones, nous avons la proposition suivante :

Démonstration. La première boucle de l’algorithme A.9 parcourt l’ensemble des poly- gones. La boucle imbriquée dans celle-ci refait une deuxième fois ce parcourt. Enfin, la dernière boucle parcourt l’ensemble des sommets de chaque polygone et est imbriquée dans les deux précédentes.

La combinaison de tous ces algorithmes donne un algorithme qui, à partir d’un ensemble de sommets et de segments qui leurs sont associés, renvoie la base élé- mentaire minimale des polygones ainsi définis avec une complexité en temps de O(N + C × M + P2× S) et en espace de O (N + M).

A.2

Fixer le paramètre de rugosité

Nous disposons donc d’un moyen de retrouver les différentes zones définies par l’uti- lisateur. Il faut maintenant déterminer quelle est la valeur de z0 dans chacune de ces zones. L’utilisateur fournit pour une série de points de références la valeur de z0. Fon- damentalement, il suffit donc, pour chaque point de référence, de déterminer dans quel polygone il se trouve et d’attribuer à la zone délimitée par ce polygone la valeur de z0 au point de référence. C’est ici que l’ambiguïté dont nous avons parlé précédemment doit être levée. En effet, si un point de référence appartient simultanément à plusieurs polygones, d’après ce qui précède, nous sommes alors soit dans le cas de la figure A.2, soit dans celui de la figure A.5. Le point appartient alors nécessairement au polygone le plus intérieur. Un moyen très simple de lever cette ambiguïté est donc de parcourir les polygones dans l’ordre de leurs aires décroissantes, ce qui fait que le dernier polygone que l’on trouvera comme contenant le point sera bien celui que nous recherchons.

Le tri est un problème réglé, on utilisera par exemple le tri rapide (voir [Knuth, 1998]). [O’Rourke, 1998] donne un algorithme permettant de calculer le double de l’aire d’un polygone quelconque avec, pour s le nombre de sommet du polygone, un coût en temps de Θ (s) et en espace de Θ (s). Dans la mesure où cela ne changera pas l’ordre des polygones, afin de limiter les erreurs d’arrondis, on ne divisera pas ces aires par 2. Cet algorithme utilise l’algorithme A.10, qui calcule le double de l’aire d’un triangle défini par trois points quelconques. Pour un point p quelconque dans un espace à deux dimensions, px est son abscisse et py son ordonnée.

Documents relatifs