Myślę, że formalizm „algebry krawędzi” Guibasa i Stolfiego jest nieco niepotrzebny.
Wszystko, co jest naprawdę konieczne, to pamiętać o rozróżnieniu między pierwotnymi i podwójnymi wykresami. Każda powierzchnia pierwotnego wykresu ma odpowiadający podwójny wierzchołek f ∗ ; każda krawędź e pierwotnego wykresu ma odpowiadającą podwójną krawędź e ∗ ; a każdy wierzchołek v pierwotnego wykresu ma odpowiadającą podwójną ścianę v ∗ . Pierwotne krawędzie łączą pierwotne wierzchołki i oddzielne pierwotne ściany; podwójne krawędzie łączą podwójne wierzchołki i oddzielne podwójne ściany. Podwójność wszystkiego jest oryginalną rzeczą. Zobacz rysunek 4 w pracy Guibasa i Stolfiego:fafa∗mimi∗vv∗
Guibas i Stolfi proponują myślenie o każdej krawędzi (pierwotnej lub podwójnej) jako zbiór czterech ukierunkowanych, zorientowanych krawędzi; dla uproszczenia nazywam te strzałki . Każda lotka punktów z jednego punktu końcowego ogona ( → e ) do innego punktu końcowego głowicy ( → E ) , a lokalnie oddziela dwie twarze w lewo ( → e ) i prawo ( → E ) . Wybór punktu końcowego, który ma być nazywany ogonem ( → e ), jest strzałkąmi⃗ ogon ( np⃗ )głowa ( np⃗ )w lewo ( np⃗ )racja ( np⃗ )ogon ( np⃗ )kierunek , a wybór, którą twarz wywołać w jest jego orientacją . (Guibas i Stolfi używają „Org” i „Dest” zamiast „tail” i „head”, ale wolę krótsze etykiety, ponieważ niepotrzebne skróty są złe.)w lewo ( np⃗ )
Dla dowolnej strzałki Guibas i Stolfi kojarzą trzy powiązane strzałki:mi⃗
- : Strzałka opuszczająca ogon ( → e ) następnie w kolejności przeciwnej do ruchu wskazówek zegara po → e .tailNext ( np⃗ )ogon ( np⃗ )mi⃗
- : „ta sama” strzałka co → e , ale z lewą ( → e ) i prawą ( → e ) zamienioną.flip ( np⃗ )mi⃗ w lewo ( np⃗ )racja ( np⃗ )
- : Podwójna strzałka uzyskana przezobrócenie → e ćwierć obrotu przeciwnie do ruchu wskazówek zegara wokół jej punktu środkowego.obróć ( np⃗ )mi⃗
Te trzy funkcje spełniają wszelkiego rodzaju wspaniałe tożsamości, takie jak:
- right(tailNext(e⃗ ))=left(e⃗ )
- right(flip(e⃗ ))=left(e⃗ )
- right(rotate(e⃗ ))=head(e⃗ )∗
- flip(flip(e⃗ ))=e⃗
- rotate(rotate(rotate(rotate(e⃗ ))))=e⃗
- tailNext(rotate(tailNext(rotate(e⃗ ))))=e⃗
e F. ja i pe.Flip
Ponadto, biorąc pod uwagę te trzy funkcje, można zdefiniować kilka innych przydatnych funkcji, takich jak
- rewers ( np⃗ ) = rotate ( flip ( rotate ( np⃗ ) ) )
- leftNext ( np⃗ ) = rotate ( tailNext ( rotate ( rotate ( rotate ( np⃗ ) ) ) ) )mi⃗ w lewo ( np⃗ )
Wreszcie, znajomość tych funkcji mówi absolutnie wszystko o topologii podziału, a każdy wieloboczny podział dowolnej powierzchni (orientowalnej lub nie) można zakodować za pomocą tych trzech funkcji.
Poczwórna struktura danych jest szczególnie wygodną reprezentacją wykresu powierzchniowego, który zapewnia dostęp do wszystkich tych funkcji, wraz z kilkoma innymi operacjami w czasie stałym, takimi jak wstawianie, usuwanie, kurczenie, rozszerzanie i przerzucanie krawędzi; dzielenie lub łączenie wierzchołków lub ścian; oraz dodawanie lub usuwanie uchwytów lub zaślepek.
Baw się dobrze!