La structure de données à quatre bords (Delaunay / Voronoi)


18

2 questions pour les géomètres de calcul ou les algèbres:

Je commence tout juste à plonger dans la géométrie informatique et je l'adore =)

J'essaie de lire le célèbre article de Guibas et Stolfi intitulé "Primitives pour la manipulation des subdivisions générales et le calcul des diagrammes de Voronoï" afin de mettre en œuvre un algorithme de triangulation de Delaunay. Je suis tenté de sauter tous les trucs théoriques et de simplement lire la description de leur structure de données à quatre bords pour gagner du temps. Cependant, je pense que cela vaut la peine de comprendre toutes les mathématiques de l'article si la structure est largement utilisée, ou tout simplement parce qu'elle peut être belle.

Les mathématiques sont un peu trop denses pour moi. Je ne suis pas complètement ignorant de la topologie, mais la description de leur algèbre de bord nécessite une connaissance de l'algèbre abstraite que je n'ai pas.

Mes deux questions sont les suivantes: Quelles sont les autres applications de la structure à quatre arêtes en dehors du calcul de Delaunay / Voronoi? Cela semble être un outil extrêmement puissant.

La deuxième question; Qu'est-ce qu'une algèbre abstraite? Ce serait bien si vous pouviez me donner une référence à une introduction à l'algèbre abstraite, juste assez pour que je puisse comprendre la section sur leur algèbre de bord.

Je vous remercie!


3
Juste pour combler les lacunes: l'algèbre abstraite est l'étude d'ensembles d'éléments qui respectent certaines règles. Comme vous l'avez peut-être deviné, les règles auxquelles ces ensembles satisfont sont des propriétés comme la fermeture, les éléments d'identité, l'existence d'inverses uniques, et comme on procède à la commutativité, l'associativité, etc. C'est l'étude de l'algèbre sur des ensembles qui ne se comportent pas nécessairement comme les nombres réels (un bon exemple sont les permutations).
Ross Snider


Je suppose que ma deuxième question a été un peu mal posée. Je connais une théorie de groupe. Je sais ce qu'est un anneau et un champ. C'est juste que dans l'article ils définissent une algèbre abstraite: "Une algèbre de bord est une algèbre abstraite (E, E *, Onext, Rot, Flip) satisfaisant aux propriétés E1-E5 et F1-F5"
bigmonachus

[...] et je n'ai aucune idée de ce que cela signifie. Ce n'est pas une algèbre sur un champ n'est-ce pas?
bigmonachus

Réponses:


32

Je pense que le formalisme de «l'algèbre de bord» de Guibas et Stolfi est un peu inutile.

Tout ce qui est vraiment nécessaire, c'est de se rappeler la distinction entre les graphes primitifs et doubles. Chaque face du graphe primitif a un sommet double correspondant f ; chaque bord e du graphe primitif a un double bord correspondant e ; et chaque sommet v du graphe primitif a une double face correspondante v . Les bords primaires relient les sommets primaires et les faces primaires séparées; les arêtes doubles connectent les sommets doubles et les faces doubles séparées. Le dual du dual de n'importe quoi est l'original. Voir la figure 4 dans l'article de Guibas et Stolfi:ffeevv

Graphiques primitifs et doubles

Guibas et Stolfi proposent de penser chaque bord (primal ou dual) comme un ensemble de quatre bords dirigés et orientés ; pour plus de simplicité, je vais appeler ces fléchettes . Chaque fléchette pointe d'une queue d' extrémité ( e ) vers l'autre tête d' extrémité ( e ) et sépare localement deux faces gauche ( e ) et droite ( e ) . Le choix du point de terminaison à appeler la queue ( e ) est celui de la fléchetteetail(e)head(e)left(e)right(e)tail(e)direction , et le choix de la face à appeler à est son orientation . (Guibas et Stolfi utilisent "Org" et "Dest" au lieu de "queue" et "tête", mais je préfère les étiquettes plus courtes, car les abréviations inutiles sont mauvaises.)left(e)

Pour toute fléchette , Guibas et Stolfi associent trois fléchettes liées:e

  1. : La fléchette quittant la queue ( e ) suivante dans le sens antihoraire aprèse .tailNext(e)tail(e)e
  2. flip(e)eleft(e)right(e)
  3. rotate(e)e

tailNext, tourner et retourner

Ces trois fonctions satisfont toutes sortes d'identités merveilleuses, comme les suivantes:

  • right(tailNext(e))=left(e)
  • right(flip(e))=left(e)
  • right(rotate(e))=head(e)
  • retourner(retourner(e))=e
  • tourner(tourner(tourner(tourner(e))))=e
  • tailNext(tourner(tailNext(tourner(e))))=e

e Fljepe.Flip

De plus, étant donné ces trois fonctions, on peut définir plusieurs autres fonctions utiles comme

  • sens inverse(e)=tourner(retourner(tourner(e)))
  • leftNext(e)=rotate(tailNext(rotate(rotate(rotate(e)))))eleft(e)

Enfin, connaître ces fonctions vous dit absolument tout sur la topologie de la subdivision, et toute subdivision polygonale de n'importe quelle surface (orientable ou non) peut être encodée à l'aide de ces trois fonctions.

La structure de données à quatre bords est une représentation particulièrement pratique d'un graphique de surface qui donne accès à toutes ces fonctions, ainsi qu'à plusieurs autres opérations à temps constant comme l'insertion, la suppression, la contraction, l'expansion et le retournement des bords; fractionner ou fusionner des sommets ou des faces; et ajouter ou supprimer des poignées ou des chapeaux croisés.

S'amuser!


J'ai utilisé OmniGraffle.
Jeffε
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.