... | ... | @@ -435,6 +435,8 @@ The following illustrated the difference between the DT (left), the CDT (middle) |
|
|
|
|
|
# Mesh generation
|
|
|
|
|
|
The meshing algorithms in this section expect as input at least an edge length function h and a segment-bounded planar straight line graph (PSLG) G.
|
|
|
|
|
|
## The edge length function
|
|
|
|
|
|
The goal of unstructured mesh generation is to produce high quality meshes containing as less elements as possible.
|
... | ... | @@ -509,7 +511,7 @@ Ruppert's algorithm [Ruppert, 1993](http://dl.acm.org/citation.cfm?id=313559.313 |
|
|
is probably the first theoretically guaranteed meshing algorithm to be truly satisfactory in practice.
|
|
|
The algorithm allows the density of triangles to vary quickly over short distance.
|
|
|
It is quite similar to Rebay's Voronoi-Vertex point insertion method, but avoids Steiner vertices outside the domain D.
|
|
|
Furthermore, it is also a Delaunay-refinement method. The user can define a minimal allowed angle theta such that the final mesh will not contain any angle smaller than theta. For an excellent and extensive description we refer to
|
|
|
Furthermore, it is also a Delaunay-refinement method. Additionally to the edge length function h, the user can define a minimal allowed angle theta such that the final mesh will not contain any angle smaller than theta. For an excellent and extensive description we refer to
|
|
|
[shewchuk, 2002](https://doi.org/10.1016/S0925-7721(01)00047-5).
|
|
|
|
|
|
****Remark****: The termination of Ruppert's algorithm is only guaranteed for a minimal angle greater than theta = 20.7 degree and no angle smaller 60 degree in the given PSLG G. The extension in [shewchuk, 2002](https://doi.org/10.1016/S0925-7721(01)00047-5) resolves the issue of small input angles in G but at this moment EikMesh only supports the algorithm proposed by Ruppert. A C-implementation is accessible via [Triangle](https://people.sc.fsu.edu/~jburkardt/c_src/triangle/triangle.html).
|
... | ... | @@ -530,8 +532,15 @@ var triangulation = ruppert.generate(); |
|
|
|
|
|
### Result:
|
|
|
|
|
|
The gray code indicate the triangle quality. The result for theta = 20 degree and h(x) = infinity,
|
|
|
theta = 30 degree and h(x) = infinity, theta = 20 and h(x) = 0.02.
|
|
|
|
|
|
![ruppert_A](uploads/d34c633fd70a2336c409b4cb9c4cf16f/ruppert_A.png)
|
|
|
|
|
|
Ruppert's algorithm is able to mesh complex geometries defined by PSLGs containing sharp corners such as the ``greenland.poly``:
|
|
|
|
|
|
![ruppert_greenland](uploads/88e1da0c0f640290cefe392cb59d10fe/ruppert_greenland.png)
|
|
|
|
|
|
---
|
|
|
|
|
|
# EikMesh <a name="EikMEsh"></a>
|
... | ... | |