Bir dizi çizgi parçası göz önüne alındığında, çift bağlantılı bir kenar listesini nasıl oluşturabilirim?


10

Belirli bir düzlemsel grafik için hat kesimleri bir dizi tarafından tayin edilen düzlemde gömülü, , her segment kendi uç noktaları ile temsil edilmektedir . Düzlemsel altbölüm için bir DCEL veri yapısı oluşturun, bir algoritmayı tanımlayın, doğruluğunu kanıtlayın ve karmaşıklığı gösterin.G(V,E)E={e1,...,em}ei{Li,Ri}

Göre DCEL veri yapısı, bu açıklama , DCEL birçok farklı nesneler arasındaki bağlantıları (örneğin, köşe kenarları ve yüzleri) vardır. Bu nedenle, bir DCEL'in oluşturulması ve bakımı zor görünmektedir.

DCEL veri yapısı oluşturmak için kullanılabilecek verimli bir algoritma biliyor musunuz?

Yanıtlar:


8

Veri yapısı ( Wikipedia makalesine uygun kurallar ):

struct half_edge;

struct vertex {
    struct half_edge *rep;  /* rep->tail == this */
};

struct face {
    struct half_edge *rep;  /* rep->left == this */
};

struct half_edge {
    struct half_edge *prev;  /* prev->next == this */
    struct half_edge *next;  /* next->prev == this */
    struct half_edge *twin;  /* twin->twin == this */
    struct vertex *tail;     /* twin->next->tail == tail &&
                                prev->twin->tail == tail */
    struct face *left;       /* prev->left == left && next->left == left */
};

Algoritma

  1. Her uç nokta için bir tepe noktası oluşturun .

  2. Her giriş segmenti için iki yarım kenar oluşturun ve kuyruk köşelerini ve ikizlerini atayın.

  3. Her uç nokta için, kuyruk tepe noktası o uç nokta olan yarım kenarları saat yönünde sıralayın.

  4. Her yarım kenar çifti e1, e2için saat yönünde, e1->twin->next = e2ve atayın e2->prev = e1->twin.

  5. Yarım kenarlardan birini seçin ve bitiş noktasının temsilcisi olarak atayın. (Dejenerasyon durumu: esıralanmış listede yalnızca bir yarım kenar varsa set e->twin->next = eve e->prev = e->twin). Sonraki işaretçiler yarım kenarlarda bir permütasyon.

  6. Her döngü için bir yüz yapısı tahsis edin ve atayın .


2
Temelde bir grup budaklı defter tutma. Muhtemelen bu nedenle ders kitabı yazarları ayrıntılara girmekte isteksizdir.
pshufb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.