the half edge data structure
Download
Skip this Video
Download Presentation
The Half-Edge Data Structure

Loading in 2 Seconds...

play fullscreen
1 / 21

The Half-Edge Data Structure - PowerPoint PPT Presentation


  • 158 Views
  • Uploaded on

The Half-Edge Data Structure. Computational Geometry, WS 2006/07 Lecture 9, Part I Prof. Dr. Thomas Ottmann Khaireel A. Mohamed. Algorithmen & Datenstrukturen, Institut für Informatik Fakultät für Angewandte Wissenschaften Albert-Ludwigs-Universität Freiburg. Overview.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'The Half-Edge Data Structure' - amato


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
the half edge data structure

The Half-Edge Data Structure

Computational Geometry, WS 2006/07

Lecture 9, Part I

Prof. Dr. Thomas Ottmann

Khaireel A. Mohamed

Algorithmen & Datenstrukturen, Institut für Informatik

Fakultät für Angewandte Wissenschaften

Albert-Ludwigs-Universität Freiburg

overview
Overview
  • Planar subdivision representation
  • Adjacency relationships and queries
  • Boundary representation structure
  • Baumgart’s winged-edge data structure
  • Doubly-connected-edge-list (DCEL)
  • Overlaying planar subdivisions
  • Analyses

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

representing a polygon mesh
Representing a Polygon Mesh
  • We require a convenient and efficient way to represent a planar subdivision.
  • Components in the planar subdivision:
    • A list of vertices
    • A list of edges
    • A list of faces storing pointers for its vertices
  • Must preserve adjacency relationships between components.

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

possible adjacency queries
Possible Adjacency Queries

Point anywhere on the polygon mesh and ask:

  • Which faces use this vertex?
  • Which edges use this vertex?
  • Which faces border this edge?
  • Which edges border this face?
  • Which faces are adjacent to this face?

Planar subdivision

Euler’s formular: v – e + f = 2

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

boundary representation structures
Boundary Representation Structures
  • To represent such queries efficiently, we use the boundary representation (B-rep) structure.
  • B-rep explicitly model the edges, vertices, and faces of the planar subdivision PLUS additional adjacency information stored inside.
  • Two most common examples of B-rep:
    • Baumgart’s winged-edge data structure
    • Doubly-connect-edge-list (DCEL)

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

baumgart s winged edge ds
e_v1[4]

v1

f1

e

f2

v2

e_v2[4]

Baumgart’s Winged-Edge DS
  • The Edge DS is augmented with pointers to:
    • the two vertices it touches (v1, v2),
    • the two faces it borders (f1, f2), and
    • pointers to four of the edges which emanate from each end point (e_v1[4], v2[4]).
  • We can determine which faces or vertices border a given edge in constant time.
  • Other types of queries can require more expensive processing.

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

the doubly connected edge list dcel
The Doubly-Connected-Edge-List (DCEL)
  • DCEL is a directed half-edgeB-rep data structure.
  • Allows all adjacency queries in constant time (per piece of information gathered). That is, for example;
    • When querying all edges adjacent to a vertex, the operation will be linear in the number of edges adjacent to the vertex, but constant time per edge.
  • The DCEL is excellent in representing manifold surfaces:
    • Every edge is bordered by exactly two faces.
    • Cross junctions and internal polygons are not allowed.

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

dcel component half edge
f

e_next

HE_edge

v_orig

e_twin

e_prev

DCEL Component – Half-edge
  • The half-edges in the DCEL that border a face form a circular linked-list around its perimeter (anti-clockwise); i.e. each half-edge in the loop stores a pointer to the face it borders (incident).
  • Each half-edge is directed and can be described in C as follows:

struct HE_edge {

HE_vert *v_orig;

HE_edge *e_twin;

HE_face *f;

HE_edge *e_next;

HE_edge *e_prev;

};

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

dcel component vertex
edge

HE_vert

p=(x,y)

DCEL Component - Vertex
  • Vertices in the DCEL stores:
    • their actual point location, and
    • a pointer to exactly ONE of the HE_edge, which uses the vertex as its origin.
  • There may be several HE_edge whose origins start at the same vertex. We need only one, and it does not matter which one.

struct HE_vert {

Gdiplus::PointF p;

HE_edge *edge;

};

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

dcel component face i
DCEL Component – Face I
  • The “bare-bones” version of the face component needs only to store a single pointer to one of the half-edges it borders.
  • In the implementation by de Berg et al. (2000), edge is the pointer to the circular loop of the OuterComponent (or the outer-most boundary) of the incident face.
  • For the unbounded face, this pointer is NULL.

struct HE_face_barebone {

HE_edge *edge;

};

HE_face_barebone

edge

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

dcel component face ii
innerComps[0]

HE_face

outerComp

DCEL Component – Face II
  • All holes contained inside an incident face are considered as InnerComponents. A list of pointers to half-edges of unique holes is maintained in HE_face as follows.
  • In the case that there are no holes in an incident face, innerComps is set to NULL.

struct HE_face {

HE_edge *outerComp;

HE_edge **innerComps;

};

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

adjacency queries
v2

f1

edge

f2

v1

Adjacency Queries
  • Given a half-edge edge, we can perform queries in constant time.
  • Example:

HE_vert *v1 = edgev_orig;

HE_vert *v2 = edgee_twinv_orig;

HE_vert *f1 = edgef;

HE_vert *f2 = edge e_twinf;

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

dcel example
DCEL Example

Example

vertex v1 = { (1, 2), h_edge(12) }

face f1 = {h_edge(15), [h_edge(67)] }

h_edge(54) = { v5, h_edge(45), f1, h_edge(43), h_edge(15) }

In terms of the structure definitions:

HE_vert v1;

v1p = new Point(1,2);

v1egde = e_12;

HE_face f1;

f1outerComp = e_15;

f1innerComp[0] = e_67;

HE_edge e_54;

e_54v_orig = v5;

e_54e_twin = e_45;

e_54f = f1;

e_54e_next = e_43;

e_54e_prev = e_15;

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

iterated adjacency queries
Iterated Adjacency Queries
  • Iterating over the half-edges adjacent to a given face.
  • Iterating over the half-edges that are adjacent to a given vertex.

HE_edge *edge = faceouterComp;

do {

// Do something with edge.

edge = edgenext;

} while (edge != faceouterComp);

HE_edge *edge = vertexedge;

do {

// Do something with edge, edgee_twin, etc.

edge = edgee_twinnext;

} while (edge != vertexedge);

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

face records
Face Records

Determining the boundary-type:

  • Is a complete edge-loop (boundary-cycle) an outer-boundary, or the boundary of a hole in the face?
    • Select the face f that we are interested in.
    • Identify the lowest of the left-most vertexv of any edge-loop.
    • Consider the two half-edges passing through v, and compute their angle .
    • If  is smaller than 180°, then the edge-loop is an outer-boundary.

f

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

top level dcel representation
c6

c3

c2

c7

c5

c1

c8

c4

Top Level DCEL Representation

Construct a graph G to representy boundary-cycles.

  • For every boundary-cycle, there is a node in G (+ imaginary bound).
  • An arc joins two cycles iff one is a boundary of a hole and the other has a half-edge immediately to the left of the left-most vertex of that hole.

Holes

c3

c1

c8

c6

c2

c7

c5

Outside

c4

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

splitting an edge
Splitting an Edge
  • Given an edge e and a point p on e, we can split e into two sub-edges e1 and e2 in constant time.

e

p

ev_orig

ee_twin

e2

p

e2e_twin

e1

ev_orig

e1e_twin

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

splitting and re directing edges
Splitting and Re-directing Edges
  • Given an edge e and a vertex v of degree deg(v) on e, we can split and redirect the sub-edges of the DCEL at v in time O(1 + deg(v)).

e

Insertion of new edges into the flow:

» Iterate edges at v.

» Exercise.

v

ev_orig

e2

v

e1

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

overlaying two planar subdivisions
Overlaying Two Planar Subdivisions

Plane sweep!

  • Event-points (maintained in balanced binary search tree):
    • Vertices of S1 and S2
    • All intersections between edges in S1 and S2
  • Status-structure (per event):
    • Neighbouring edges sorted in increasing x-order.

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

handling intersections
2

1

3

3

1

7

4

5

8

8

L

7

2

1

P

U(P)

C(P)

7

3

1

3

C(P)

2

Handling Intersections
  • Additional handling of ‘intersection’ event points:
    • Split and re-direct edges.
    • Check new nearest-neighbours for intersections.
  • Recall (from Lecture 3):

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

analysis
Analysis

For a total of n vertices in both S1 and S2:

  • Sorting of n vertices: O(n log n) time
  • Runtime per ‘intersection’-vertex: O(1 + deg(v))
  • Time to retrieve neighbouring edges per ‘interection’-vertex: O(log n)
  • Total ‘intersection’-vertices: k
  • Total runtime: O(n log n + k log n)

Computational Geometry, WS 2006/07

Prof. Dr. Thomas Ottmann

ad