Constructing V-diagrams CS 101 Many algorithms Meshing Introduction to Delaunay Triangulations and Voronoi Diagrams Part II old ones (hard to implement, slow) simple ones divide&conquer, inters. of halfplanes incremental, n2, but can be made fast fast ones plane sweep by Fortune (’85) nlogn randomized CH CS101 - Meshing 2 Fortune’s Algo I Fortune’s Algo II Sweep-line algorithm Circle Events edge events planned by 3 consecutive arcs trig. when sweepline reaches bottom each time when line encounters a point start a parabola (line = directrix) locus of points equidistant from site and line if corresp. sites have circle intersect. line happens at Voronoi vertex – kill arc “Beachline” breaks in beachline? on Voronoi edge! CS101 - Meshing CS101 - Meshing 3 Fortune’s Algo III 4 Fortune In Action Maintaining the beach line tree updated as events occur events stored in a priority queue circle events not known apriori… they must be added/discarded as the sweep moves downward. requires data structures in sync bookkeeping CS101 - Meshing CS101 - Meshing 5 6 Fortune’s Algo IV Other Approaches Also a sweep-plane in higher dim! Definition: Edge (pipj) locally Delaunay iff circumcircle of (pipjpk) does not contain vertex pl at 45°, intersecting cones (sites) DT: all edges local Del. CS101 - Meshing CS101 - Meshing 7 Idea: Edge Flipping Maximum Minimum Angle Check all edges, and fix them! if ok, validate if not Remember DT property! check an edge 8 Once can check edge flip invalidate adjacent edges does the algorithm terminate? finite number of triangulations CS101 - Meshing flip needed iff: so it WILL terminate CS101 - Meshing 9 Vertex Insertion I Vertex Insertion II Edge flipping can be quite slow Add p in (abc): n2 worst case But can derive an incremental algo Add points one at a time 10 typical process easy to implement still the fastest around numerical robustness? and fix bad edges on the fly an issue but very well studied Pre-order vertices along one direction helps coherency, fast “search” Or use randomization… CS101 - Meshing CS101 - Meshing 11 12 The Shortest Code? Exotic Delaunay /* Input points and compute z = x^2 + y^2. */ scanf("%d", &n); for ( i = 0; i < n; i++ ) { scanf("%d %d", &x[i], &y[i]); z[i] = x[i] * x[i] + y[i] * y[i];} /* For each triple (i,j,k) */ for ( i = 0; i < n - 2; i++ ) for ( j = i + 1; j < n; j++ ) for ( k = i + 1; k < n; k++ ) if ( j != k ) { /* Compute normal to triangle (i,j,k). */ xn = (y[j]-y[i])*(z[k]-z[i]) - (y[k]-y[i])*(z[j]-z[i]); yn = (x[k]-x[i])*(z[j]-z[i]) - (x[j]-x[i])*(z[k]-z[i]); zn = (x[j]-x[i])*(y[k]-y[i]) - (x[k]-x[i])*(y[j]-y[i]); Variations of standard VD/DT Non-Euclidean distance metrics Power diagrams Uses Lifting Map! /* Only examine faces on bottom of paraboloid: zn < 0. */ if ( flag = (zn < 0) ) /* For each other point m */ for (m = 0; m < n; m++) /* Check if m above (i,j,k). */ flag = flag && ((x[m]-x[i])*xn + (y[m]-y[i])*yn + (z[m]-z[i])*zn <= 0); if (flag) printf("z=%10d; lower face indices: %d, %d, %d\n", zn, i, j, k); CS101 - Meshing instead of same closest site… same set of k closest sites or same furthest point CS101 - Meshing 13 Constrained Delaunay What if there are walls not all sites treated equally kth-order & furthest-site diagrams obstructing the view, thus the notion of proximity Constrained Delaunay! ok in 2D, still hard in 3D… Recommended reading: Shewchuk CS101 - Meshing 15 14
© Copyright 2024