2D Triangulations in 2D Triangulations in
http://
http:// www.cgal.org www.cgal.org
Pierre Alliez Pierre Alliez Mariette
Mariette YvinecYvinec
Outline Outline
•• SpecificationsSpecifications
–– DefinitionDefinition
–– Triangulations in CGALTriangulations in CGAL –– FeaturesFeatures
•• RepresentationRepresentation
–– As a set of facesAs a set of faces
–– Representation based on vertices and cellsRepresentation based on vertices and cells
•• Software designSoftware design
–– Traits classTraits class
–– Triangulation data structureTriangulation data structure
•• AlgorithmsAlgorithms
–– Point locationPoint location
•• ExamplesExamples
•• ApplicationsApplications
Outline Outline
•• SpecificationsSpecifications
–– DefinitionDefinition
–– Triangulations in CGALTriangulations in CGAL –– FeaturesFeatures
•• RepresentationRepresentation
–– As a set of facesAs a set of faces
–– Representation based on vertices and cellsRepresentation based on vertices and cells
•• Software designSoftware design
–– Traits classTraits class
–– Triangulation data structureTriangulation data structure
•• AlgorithmsAlgorithms
–– Point locationPoint location
•• ExamplesExamples
•• ExercisesExercises
Definitions Definitions
• • A A 2D triangulation 2D triangulation is a set is a set T T of triangular of triangular facets such that:
facets such that:
–– two facets are either disjoint or share a lower two facets are either disjoint or share a lower dimensional face (edge or vertex).
dimensional face (edge or vertex).
–– the set of facets in the set of facets in TT is connected for the is connected for the adjacency relation.
adjacency relation.
–– the domain the domain UUTT which is the union of facets in which is the union of facets in TT has no singularity.
has no singularity.
Definitions Definitions
•• A A simplicialsimplicial complex is a set complex is a set T T of of simplicessimplices such thatsuch that
–– any face of a simplex in any face of a simplex in T is a simplex in T is a simplex in TT
–– two two simplicessimplices in T in T either are disjoint or share a common either are disjoint or share a common subface
subface..
•• The dimension The dimension d d of a of a simplicialsimplicial complex is the complex is the maximal dimension of its
maximal dimension of its simplicessimplices..
•• A A simplicialsimplicial complex complex T T is pure if any simplex of is pure if any simplex of T T is is included in a simplex of
included in a simplex of T T with maximal dimension.with maximal dimension.
Definitions Definitions
•• Two simplexes in Two simplexes in T T with maximal dimension with maximal dimension d d are are said to be adjacent if they share a (
said to be adjacent if they share a (dd--1) 1) dimensional dimensional subface
subface. A . A simplicialsimplicial complex is connected if the complex is connected if the adjacency relation defines a connected graph over adjacency relation defines a connected graph over the set of
the set of simplicessimplices of of T T with maximal dimension.with maximal dimension.
•• The union The union UUTT of all of all simplicessimplices in in T T is called the is called the domain of
domain of TT. .
•• A point A point p p in the domain of in the domain of T T is said to singular if its is said to singular if its surrounding in
surrounding in UUTT is neither a topological ball nor a is neither a topological ball nor a topological disc.
topological disc.
2D Triangulations in CGAL 2D Triangulations in CGAL
– – Basic Basic
– – Delaunay Delaunay – – Regular Regular
– – Constrained Constrained
– – Constrained Delaunay Constrained Delaunay
Basic Triangulation Basic Triangulation
• Lazy incremental construction, no
control over the shape of triangles
Delaunay Triangulation Delaunay Triangulation
• • Empty circle property Empty circle property
Regular Triangulation Regular Triangulation
• • Generalization of Delaunay Generalization of Delaunay triangulation.
triangulation.
• • Defined for a set of Defined for a set of weighted weighted points
points . Each weighted point . Each weighted point can be considered as a sphere can be considered as a sphere whose square radius is equal whose square radius is equal to the weight. The regular to the weight. The regular
triangulation is the dual of the triangulation is the dual of the power diagram.
power diagram.
Constrained Triangulation Constrained Triangulation
• • Allows to Allows to enforce edges enforce edges . .
Constrained Delaunay Constrained Delaunay
Triangulation Triangulation
•• Constrained triangulation which is Constrained triangulation which is as much as much Delaunay as possible
Delaunay as possible. Each triangle satisfies the . Each triangle satisfies the constrained empty circle property: Its
constrained empty circle property: Its
circumscribing circle encloses no vertex visible from circumscribing circle encloses no vertex visible from the interior of the triangle, where enforced edges the interior of the triangle, where enforced edges are considered as visibility obstacles.
are considered as visibility obstacles.
Derivation Tree (2D)
Derivation Tree (2D)
General Features General Features
•• Traversal:Traversal:
–– going from a face to its neighborsgoing from a face to its neighbors
–– iterators to visit all faces of a triangulationiterators to visit all faces of a triangulation
–– circulators to visit all faces around a vertex or all faces circulators to visit all faces around a vertex or all faces intersected by a line.
intersected by a line.
•• Point location queryPoint location query
•• Insertion, removal, flips:Insertion, removal, flips:
–– Features adapted to each type of triangulations (e.g., the Features adapted to each type of triangulations (e.g., the
insertions and deletions in a Delaunay triangulation maintain th insertions and deletions in a Delaunay triangulation maintain the e empty circle property).
empty circle property).
Additional Features Additional Features
• • For some triangulations For some triangulations
Additional Features Additional Features
• Example for constrained and Delaunay constrained triangulations:
– Insertion and removal of constraints
Additional Features Additional Features
• • For For Delaunay triangulation Delaunay triangulation
– – Nearest neighbor queries Nearest neighbor queries – – Voronoi diagram Voronoi diagram
Point p = dual(face)
Traversal (1) Traversal (1)
• • Iterators Iterators
– – All faces All faces iterator iterator
– – All vertices iterator All vertices iterator
– – All edges All edges iterator iterator
Traversal (2) Traversal (2)
• • Circulators Circulators
– – Face circulator Face circulator
•• faces incident to a vertexfaces incident to a vertex
– – Edge circulator Edge circulator
•• edges incident to a vertexedges incident to a vertex
– – Vertex circulator Vertex circulator
•• vertices incident to a vertexvertices incident to a vertex
Traversal (3) Traversal (3)
• • Line face circulator Line face circulator
Point Location & Insertion
Point Location & Insertion
Edge Flip
Edge Flip
Outline Outline
•• SpecificationsSpecifications
–– DefinitionDefinition
–– Triangulations in CGALTriangulations in CGAL –– FeaturesFeatures
•• RepresentationRepresentation
–– As a set of facesAs a set of faces
–– Representation based on vertices and cellsRepresentation based on vertices and cells
•• Software designSoftware design
–– Traits classTraits class
–– Triangulation data structureTriangulation data structure
•• AlgorithmsAlgorithms
–– Point locationPoint location
•• ExamplesExamples
•• ExercisesExercises
Triangulations as a Set of Faces Triangulations as a Set of Faces
• All triangulations in CGAL tile the convex hull of their vertices. Triangulated polygonal regions can be obtained through constrained triangulations.
Triangulations as a Set of Faces Triangulations as a Set of Faces
• All triangulations in CGAL tile the convex hull of their vertices. Triangulated polygonal regions can be obtained through constrained triangulations.
• An imaginary vertex (so-called infinite vertex is added).
Triangulations as a Set of Faces Triangulations as a Set of Faces
• All triangulations in CGAL tile the convex hull of their vertices. Triangulated polygonal regions can be obtained through constrained triangulations.
• An imaginary vertex (so-called infinite vertex is added).
– Any face is a triangle.
– Any edge is incident to two exactly 2 faces.
– The set of faces is equivalent to a 2D topological sphere.
Triangulations as a Set of Faces Triangulations as a Set of Faces
In any dimension, the set of faces is combinatorically equivalent to a triangulated
sphere.
00 11
22
33
Representation Representation
• • The internal representation is based on The internal representation is based on faces
faces and and vertices vertices . .
• • Edges are Edges are implicitly implicitly represented represented
• • Vertex Vertex
–– Face* v_faceFace* v_face
• • Face Face
–– Vertex* vertex[3]Vertex* vertex[3]
–– Face* neighbor[3]Face* neighbor[3]
Representation Representation
• • functions functions cw(i cw(i ) ) & & ccw(i ccw(i ) )
Representation Representation
• • From one face to another From one face to another
Representation Representation
• • Around a vertex Around a vertex
Outline Outline
•• SpecificationsSpecifications
–– DefinitionDefinition
–– Triangulations in CGALTriangulations in CGAL –– FeaturesFeatures
•• RepresentationRepresentation
–– As a set of facesAs a set of faces
–– Representation based on vertices and cellsRepresentation based on vertices and cells
•• Software designSoftware design
–– Traits classTraits class
–– Triangulation data structureTriangulation data structure
•• AlgorithmsAlgorithms
–– Point locationPoint location
•• ExamplesExamples
•• ExercisesExercises
Software Design Software Design
• CGAL classes are parameterized by one or more template parameters :
–– Polygon_2<Polygon_2<TraitsTraits, Container>, Container>
–– Polyhedron_3<Polyhedron_3<TraitsTraits, HDS>, HDS>
–– Planar_map_2<Planar_map_2<Dcel,TraitsDcel,Traits>>
–– Arrangement_2<Arrangement_2<Dcel,TraitsDcel,Traits,Base,Base node>node>
–– Min_circle_2<Min_circle_2<TraitsTraits>>
–– Point_set_2<Point_set_2<TraitsTraits>>
–– Range_tree_k<Range_tree_k<Traits>Traits>
Triangulation Classes Triangulation Classes
Triangulation_2<
Triangulation_2< Traits Traits , , TDS TDS > >
Triangulation_3<
Triangulation_3< Traits Traits , , TDS TDS > >
• • Traits Traits
– – Geometric traits Geometric traits
• • TDS TDS
– – Triangulation Data Structure Triangulation Data Structure
Geometric Traits Geometric Traits
• • Geometric Geometric traits classes traits classes provide : provide :
–– Basic geometric objectsBasic geometric objects
–– Predicates and ConstructorsPredicates and Constructors
• • Requirements for traits are documented Requirements for traits are documented
–– basic library data structures and algorithms can basic library data structures and algorithms can be used with user
be used with user--defined objectsdefined objects
• • Default traits classes are provided Default traits classes are provided
Traits Class for Traits Class for
Delaunay Triangulation Delaunay Triangulation
•• Requirements:Requirements:
–– PointPoint –– SegmentSegment –– TriangleTriangle –– LineLine
–– RayRay
–– orientation testorientation test –– in circle testin circle test –– circumcentercircumcenter –– bisectorbisector
Traits Class for Traits Class for
Delaunay Triangulation Delaunay Triangulation
• • Default traits class: Default traits class:
–– Triangulation_euclidean_traits_2<KernelTriangulation_euclidean_traits_2<Kernel>>
• • Delaunay triangulation of 2D points: Delaunay triangulation of 2D points:
–– typedeftypedef Cartesian<doubleCartesian<double> > KernelKernel;;
–– typedeftypedef Triangulation_euclidean_traits_2<KernelTriangulation_euclidean_traits_2<Kernel> > TraitsTraits;; –– typedeftypedef Delaunay_triangulation_2<TraitsDelaunay_triangulation_2<Traits> Triangulation;> Triangulation;
Predicates for Predicates for
Delaunay Triangulation
Delaunay Triangulation
Traits Class for Terrains Traits Class for Terrains
Needs Needs
–– 3D points3D points –– orientationorientation –– in circlein circle
–– on x and y coordinateson x and y coordinates
Triangulation_euclidean_traits_xy_3<
Triangulation_euclidean_traits_xy_3<Kernel>Kernel>
Definition Definition::
typedef
typedef Cartesian<double> KernelCartesian<double> Kernel;; typedef
typedef Triangulation euclideanTriangulation euclidean traits xytraits xy 3<3<KernelKernel> Traits;> Traits;
typedef
typedef Delaunay triangulation 2<Traits> Triangulation;Delaunay triangulation 2<Traits> Triangulation;
Software Design Software Design
template< class Gt, class Tds>
Triangulation_2 ;
template<class Vb, class Fb>
Triangulation_data_structure_2;
Triangulation Design Triangulation Design
Vertex base Vertex base
Vertex base :: Point Vertex base :: Point Vertex base
Vertex base( Point p, void* f)( Point p, void* f) Point
Point pointpoint();();
void*
void* faceface();();
void*
void* set pointset point();();
void*
void* set faceset face();();
Face base Face base Face base
Face base(void* v0, void* v1, void* v2,(void* v0, void* v1, void* v2, void* n0, void* n1, void* n2)
void* n0, void* n1, void* n2) void*
void* vertexvertex(int(int i);i);
void*
void* neighborneighbor(int(inti);i);
void*
void* set set vertexvertex(int(int i, void* v);i, void* v);
void*
void* set set neighborneighbor(int(int i, void* f);i, void* f);
Triangulation Data Structure Triangulation Data Structure
Tds<Tds<Vb,FbVb,Fb>>
Types:
Types:
•• Tds<Tds<Vb,FbVb,Fb>::Vertex inherits from >::Vertex inherits from VbVb
•• Tds<Tds<Vb,FbVb,Fb>::Face inherits from >::Face inherits from FbFb
•• Tds<Tds<Vb,FbVb,Fb>::Face >::Face iteratoriterator
•• Tds<Tds<Vb,FbVb,Fb>::Edge >::Edge iteratoriterator
•• Tds<Tds<Vb,FbVb,Fb>::Vertex >::Vertex iteratoriterator
•• Tds<Tds<Vb,FbVb,Fb>::Face circulator>::Face circulator
•• Tds<Tds<Vb,FbVb,Fb>::Edge circulator>::Edge circulator
•• Tds<Tds<Vb,FbVb,Fb>::Vertex circulator>::Vertex circulator
Combinatorial Operations Combinatorial Operations
void
void insert_in_face insert_in_face (Vertex* v,Face* f)(Vertex* v,Face* f) void
void insert_in_edge insert_in_edge (Vertex* v, Face* f, (Vertex* v, Face* f, intint i)i) void
void remove_degre_3 (Vertex* v);remove_degre_3 (Vertex* v);
Combinatorial Operations Combinatorial Operations
void
void flip flip (Face* f, (Face* f, int int i); i);
void
void split vertex split vertex (Vertex*, Face* f1, Face* f2) (Vertex*, Face* f1, Face* f2) void
void join vertices join vertices (Vertex* v1, vertex* v2) (Vertex* v1, vertex* v2)
The Triangulation Class The Triangulation Class
CGAL::Triangulation 2<
CGAL::Triangulation 2<GtGt, , TdsTds >>
typedef
typedef GtGtgeometric_traits;geometric_traits;
typedef
typedef TdsTds Triangulation_data_structure;Triangulation_data_structure;
typedef
typedef Triangulation_2<GtTriangulation_2<Gt, , TdsTds > Triangulation;> Triangulation;
Types Types
Gt::Point_2Gt::Point_2 Gt::
Gt::Segment_2Segment_2 Gt::
Gt::Triangle_2Triangle_2 Triangulation::
Triangulation::Vertex Vertex inherits from inherits from Tds::VertexTds::Vertex Triangulation::
Triangulation::Face Face inherits from inherits from Tds::FaceTds::Face Triangulation::
Triangulation::Vertex_handleVertex_handle Triangulation::
Triangulation::Face_handleFace_handle
typedef
typedef pair<Face handle, intpair<Face handle, int> > Edge Edge ;; Triangulation::
Triangulation::Face_iteratorFace_iterator Triangulation::
Triangulation::Edge_iteratorEdge_iterator Triangulation::
Triangulation::Vertex_iteratorVertex_iterator Triangulation::
Triangulation::Line_face_circulatorLine_face_circulator Triangulation::
Triangulation::Face_circulatorFace_circulator Triangulation::
Triangulation::Edge_circulatorEdge_circulator Triangulation::
Triangulation::Vertex_circulatorVertex_circulator
High Level Functions High Level Functions
enumenum Locate_type {Locate_type { VERTEX=0, EDGE, FACE, VERTEX=0, EDGE, FACE, OUTSIDE_CONVEX_HULL, OUTSIDE_CONVEX_HULL, OUTSIDE_AFFINE_HULL}
OUTSIDE_AFFINE_HULL}
Face_handle
Face_handle locatelocate(( Point query, Point query, Locate_type&
Locate_type& ltlt,, int& int& lili,,
Face_handle h =Face_handle() );
Face_handle h =Face_handle() );
Vertex_handle
Vertex_handle insertinsert(Point p)(Point p) void
void removeremove(Vertex_handle v)(Vertex_handle v)
Insertion Insertion
Vertex handle insert (Point p) {
Locate type lt; int li;
Face handle loc = locate(p, lt, li);
switch(lt) {
case VERTEX : return f->vertex(li);
case EDGE :return insert_in_edge( p, loc,li);
case FACE :return insert_in_face(v,loc);
case OUTSIDE CH :return insert_outside ch(p,loc);
case OUTSIDE AH :return insert_outside ah(p);
} }
Performances Performances
Kilimandjaro elevation contour lines (38K segments)
Related Components Related Components
•• Voronoi diagramVoronoi diagram
•• Elevation (through traits class)Elevation (through traits class)
Courtesy IPF,Vienna University of Technology & Inpho GmbH
Outline Outline
•• SpecificationsSpecifications
–– DefinitionDefinition
–– Triangulations in CGALTriangulations in CGAL –– FeaturesFeatures
•• RepresentationRepresentation
–– As a set of facesAs a set of faces
–– Representation based on vertices and cellsRepresentation based on vertices and cells
•• Software designSoftware design
–– Traits classTraits class
–– Triangulation data structureTriangulation data structure
•• AlgorithmsAlgorithms
–– Point locationPoint location
•• ExamplesExamples
•• ExercisesExercises
Algorithms for Triangulation Algorithms for Triangulation
•• All CGAL triangulations are built through All CGAL triangulations are built through incremental
incremental onon--line insertion of vertices. line insertion of vertices.
•• The main algorithmic issue is therefore to deal with The main algorithmic issue is therefore to deal with point
point locationlocation. .
•• CGAL offers different algorithms :CGAL offers different algorithms :
–– linewalklinewalk –– Zigzag walkZigzag walk
–– jump and walk strategyjump and walk strategy –– the Delaunay hierarchythe Delaunay hierarchy
Efficient Localization Efficient Localization
• • Delaunay Hierarchy Delaunay Hierarchy
Outline Outline
•• SpecificationsSpecifications
–– DefinitionDefinition
–– Triangulations in CGALTriangulations in CGAL –– FeaturesFeatures
•• RepresentationRepresentation
–– As a set of facesAs a set of faces
–– Representation based on vertices and cellsRepresentation based on vertices and cells
•• Software designSoftware design
–– Traits classTraits class
–– Triangulation data structureTriangulation data structure
•• AlgorithmsAlgorithms
–– Point locationPoint location
•• ExamplesExamples
•• ExercisesExercises
#include <CGAL/Cartesian.h>
#include <CGAL/Cartesian.h>
#include <CGAL/Triangulation_2.h>
#include <CGAL/Triangulation_2.h>
using
using namespace CGAL;namespace CGAL;
using
using namespace std;namespace std;
typedef
typedef Cartesian<doubleCartesian<double> > KernelKernel;; typedef
typedef Triangulation_2<KernelTriangulation_2<Kernel> Triangulation;> Triangulation;
typedef
typedef Triangulation::Vertex_circulator Vertex_circulator;Triangulation::Vertex_circulator Vertex_circulator;
typedef
typedef Kernel::Point_2 Point;Kernel::Point_2 Point;
Triangulation t;
Triangulation t;
Point p;
Point p;
while
while(cin(cin >> p) t.insert(p);>> p) t.insert(p);
Vertex_circulator
Vertex_circulator vcvc = t.incident_vertices(t.infinite_vertex());= t.incident_vertices(t.infinite_vertex());
Vertex_circulator
Vertex_circulator done(vcdone(vc););
dodo
coutcout << << vc-vc->point();>point();
while
while(++vc(++vc != done);!= done);
Drawing Generators...
Drawing Generators...
template <
template <classclass kernel, classkernel, class TDS>TDS>
class
class DT2 : publicDT2 : public CGAL::Delaunay_triangulation_2<kernel,TDS>CGAL::Delaunay_triangulation_2<kernel,TDS>
{{
public:
public:
voidvoid gl_draw_generators()gl_draw_generators() {{
::glBegin::glBegin(GL_POINTS(GL_POINTS););
Point_iterator Point_iterator it;it;
for(it = points_begin();
for(it = points_begin();
it != points_end();
it != points_end();
it++) it++) {{
const Point& p = *it;
const Point& p = *it;
::glVertex2f(p.x(),p.y());
::glVertex2f(p.x(),p.y());
}}
::glEnd::glEnd();();
}} }}
Drawing Delaunay Edges...
Drawing Delaunay Edges...
voidvoid gl_draw_delaunay_edges()gl_draw_delaunay_edges() {{
::glBegin::glBegin(GL_LINES(GL_LINES););
Edge_iterator Edge_iterator it;it;
for(itfor(it = edges_begin(); = edges_begin();
it != edges_end();
it != edges_end();
it++) it++) {{
// edge =
// edge = std::pairstd::pair<<Face_handle,intFace_handle,int>>
Edge& edge = *it;
Edge& edge = *it;
const
const Point& p1 = edge.firstPoint& p1 = edge.first->->vertex(ccw(edge.secondvertex(ccw(edge.second))))-->point();>point();
const
const Point& p2 = edge.firstPoint& p2 = edge.first->->vertex(cw(edge.secondvertex(cw(edge.second))))-->point();>point();
::glVertex2f::glVertex2f(p1.x(), p1.y());(p1.x(), p1.y());
::glVertex2f::glVertex2f(p2.x(), p2.y());(p2.x(), p2.y());
}} ::
::glEndglEnd();();
}}
Drawing Voronoi Edges Drawing Voronoi Edges
voidvoid gl_draw_voronoi_edges()gl_draw_voronoi_edges() {{ ::glBegin::glBegin(GL_LINES(GL_LINES););
Edge_iterator
Edge_iteratorhEdge;hEdge;
for(hEdgefor(hEdge = edges_begin(); = edges_begin(); hEdgehEdge!= edges_end(); hEdge!= edges_end(); hEdge++) ++) {
{
CGAL::Object object =
CGAL::Object object = dual(hEdgedual(hEdge););
Segment segment;
Segment segment;
Ray ray;
Ray ray;
Point source, target;
Point source, target;
if(CGAL::assign(segment,object)) if(CGAL::assign(segment,object)) {{
source = segment.source();
source = segment.source();
target = segment.target();
target = segment.target();
} } else if
else if(CGAL::assign(ray,object)) (CGAL::assign(ray,object)) {{
source = ray.source();
source = ray.source();
target = ray.point(1);
target = ray.point(1);
}}
::glVertex2f::glVertex2f(source.x(),source.y());(source.x(),source.y());
::
::glVertex2fglVertex2f(target.x(),target.y());(target.x(),target.y());
} }
::glEnd::glEnd(); }(); }
Demo Demo
Applications Applications
• • Meshing Meshing
–– rendering, simulationrendering, simulation
• • Remeshing Remeshing
–– reverse engineeringreverse engineering
• • Efficient location Efficient location
• • Placement of streamlines Placement of streamlines
–– scientific visualizationscientific visualization
• • ... ...
Reverse Engineering Reverse Engineering
1. 1. Digitizing physical objects Digitizing physical objects
The Digital Michelangelo Project The Digital Michelangelo Project
point set point set
Reverse Engineering Reverse Engineering
1. 1. Digitizing physical objects Digitizing physical objects
2. 2. Representing the resulting dense point Representing the resulting dense point set with:
set with:
– – discrete surface discrete surface
•• e.g. triangle meshe.g. triangle mesh
– – mathematical surface mathematical surface
•• implicit functionimplicit function
•• ∑∑ radial basis functionsradial basis functions
•• NURBS patchesNURBS patches
•• etc.etc.
A Typical Pipeline A Typical Pipeline
•• DigitizationDigitization
–– physical object -physical object -> point set> point set
•• ReconstructionReconstruction
–– point set -point set -> surface> surface
•• Resampling / RemeshingResampling / Remeshing
•• ProcessingProcessing
–– e.g. denoising, smoothing, fairinge.g. denoising, smoothing, fairing
•• Segmentation / StructuringSegmentation / Structuring
•• EditingEditing
•• Storage & TransmissionStorage & Transmission
•• Simulation and/or VisualizationSimulation and/or Visualization
•• Browsing & RetrievalBrowsing & Retrieval
•• 3D Printing3D Printing physical
digital
physical
Definition Definition
• • Isotropic Isotropic sampling: sampling:
– – Locally uniform in all directions Locally uniform in all directions – – Generate compact elements Generate compact elements
– – Used for simulation and processing Used for simulation and processing
Isotropic
Isotropic Sampling Sampling ? ?
1. 1. Global Parameterization Global Parameterization
Conformal Mapping Conformal Mapping
““A A well-well-shapedshaped element in parameter space will not element in parameter space will not be deformed too much once lifted in embedding be deformed too much once lifted in embedding space”
space”
2. 2. Initial Initial Sample Sample Repartition Repartition
Voronoi diagram
3. 3. Precise Precise Sample Sample Placement Placement
Lloyd Lloyd
centroidal Voronoi diagram
Uniform Remeshing Uniform Remeshing
50kV50kV