diff --git a/Mesh_2/changes.txt b/Mesh_2/changes.txt index c2886ac9a15..8a24933309d 100644 --- a/Mesh_2/changes.txt +++ b/Mesh_2/changes.txt @@ -1,3 +1,11 @@ +20 April 2006 Laurent Rineau +- small changes in the user manual: + - change captions location + - fix typos and bad english +(thanks to Pierre Alliez) +- fix a typo in doc_tex/Mesh_2_ref/Delaunay_mesh_*criteria_2.tex : + (1/2B instead of 1/4B^2) + 13 April 2006 Laurent Rineau - added test_conforming and test_meshing in test/ with test files. - rename test/Mesh_2/makefile to GNUmakefile, not submitted: diff --git a/Mesh_2/doc_tex/GNUmakefile b/Mesh_2/doc_tex/GNUmakefile index b00eeebeb94..3c42dd78c94 100644 --- a/Mesh_2/doc_tex/GNUmakefile +++ b/Mesh_2/doc_tex/GNUmakefile @@ -1,9 +1,9 @@ all: - cgal_manual Mesh_2 + cgal_manual Mesh_2 Mesh_2_ref ps: - cgal_manual -ps Mesh_2 + cgal_manual -ps Mesh_2 Mesh_2_ref html: - cgal_manual -html Mesh_2 + cgal_manual -html Mesh_2 Mesh_2_ref diff --git a/Mesh_2/doc_tex/Mesh_2/main.tex b/Mesh_2/doc_tex/Mesh_2/main.tex index 0aa7d0e89c6..10482c260b6 100644 --- a/Mesh_2/doc_tex/Mesh_2/main.tex +++ b/Mesh_2/doc_tex/Mesh_2/main.tex @@ -21,12 +21,12 @@ meshes in Section~\ref{sec:Mesh_2_meshes}. A triangulation is a \emph{Delaunay triangulation} if the circumscribing circle of any facet of the triangulation contains no vertex in its interior. A \emph{constrained} Delaunay triangulation is a constrained -triangulation which is a much Delaunay as possible. The circumscribing +triangulation which is as much Delaunay as possible. The circumscribing circle of any facet of a constrained Delaunay triangulation contains in its interior no data point \emph{visible} from the facet. An edge is said to be a \emph{Delaunay edge} if it is inscribed in an empty -circle (containing no data point in its interior). It is said to be a +circle (containing no data point in its interior). This edge is said to be a \emph{Gabriel edge} if its diametrical circle is empty. A constrained Delaunay triangulation is said to be a \emph{conforming @@ -39,13 +39,13 @@ edges are marked as constrained edges. A constrained Delaunay triangulation is said to be a \emph{conforming Gabriel triangulation} if every constrained edge is a Gabriel edge. The Gabriel property is stronger than the Delaunay property and each Gabriel -edge is a Delaunay edge. Thus conforming Gabriel triangulations are also +edge is a Delaunay edge. Conforming Gabriel triangulations are thus also conforming Delaunay triangulations. Any constrained Delaunay triangulation can be refined into a -conforming Delaunay triangulation or a conforming Gabriel +conforming Delaunay triangulation or into a conforming Gabriel triangulation by adding vertices, called \emph{Steiner vertices}, on -constrained edges until they are cut into subconstraints small enough +constrained edges until they are decomposed into subconstraints small enough to be Delaunay or Gabriel edges. \subsection{Building Conforming Triangulations} @@ -53,7 +53,7 @@ to be Delaunay or Gabriel edges. Constrained Delaunay triangulations can be refined into conforming triangulations -by two global functions: \\ +by the two following global functions: \\ \ccc{template void make_conforming_Delaunay_2 (CDT& t)}~and\\ \ccc{template void make_conforming_Gabriel_2 (CDT& t)}. @@ -61,26 +61,25 @@ In both cases, the template parameter \ccc{CDT} must be instantiated by a constrained Delaunay triangulation class. Such a class must be a model of the concept \ccc{ConstrainedDelaunayTriangulation_2}. -There are some requirements on the geometric traits of the constrained -Delaunay triangulation used to instantiate the parameter \ccc{CDT}. -It has to be a model of the concept -\ccc{ConformingDelaunayTriangulationTraits_2}. +The geometric traits of the constrained +Delaunay triangulation used to instantiate the parameter \ccc{CDT} has to +be a model of the concept \ccc{ConformingDelaunayTriangulationTraits_2}. The constrained Delaunay triangulation \ccc{t} is passed by reference -and is refined into a conforming Delaunay triangulation or a -conforming Gabriel triangulation by adding vertices, that is, the -triangulation is modified. If the user needs to keep the original -triangulation, he or she has to make a copy of it. +and is refined into a conforming Delaunay triangulation or into a +conforming Gabriel triangulation by adding vertices. The user is advised to +make a copy of the input triangulation in the case where the original +triangulation has to be preserved for other computations The algorithm used by \ccc{make_conforming_Delaunay_2} and -\ccc{make_conforming_Gabriel_2} builds internal data that would be +\ccc{make_conforming_Gabriel_2} builds internal data structures that would be computed twice if the two functions are called consecutively on the same triangulation. In order to avoid these data to be constructed twice, the advanced user can use the class \ccc{Triangulation_conformer_2} to refine a constrained Delaunay triangulation into a conforming Delaunay -triangulation and then into a conforming Gabriel triangulation. That class -provides also step by step functions. Those functions insert one point at a -time. +triangulation and then into a conforming Gabriel triangulation. For +additional control of the refinement algorithm, this class also provides +separate functions to insert one Steiner point at a time. \subsection{Example: Making a Triangulation Conforming Delaunay and Then Conforming Gabriel} @@ -98,54 +97,45 @@ See figures~\ref{Conform-example-conform}, and~\ref{Conform-example-conform-Gabriel}. \begin{figure}[htbp] -\begin{ccTexOnly} \begin{center} +\begin{ccTexOnly} \includegraphics[width=8cm]{Mesh_2/example-conform} -\end{center} \end{ccTexOnly} -\caption{Initial triangulation.} -\label{Conform-example-conform} - \begin{ccHtmlOnly} -
-
\end{ccHtmlOnly} +\end{center} +\caption{Initial triangulation.} +\label{Conform-example-conform} \end{figure} \begin{figure}[htbp] -\begin{ccTexOnly} \begin{center} +\begin{ccTexOnly} \includegraphics[width=8cm]{Mesh_2/example-conform-Delaunay} -\end{center} \end{ccTexOnly} -\caption{The corresponding conforming Delaunay triangulation.} -\label{Conform-example-conform-Delaunay} - \begin{ccHtmlOnly} -
-
\end{ccHtmlOnly} +\end{center} +\caption{The corresponding conforming Delaunay triangulation.} +\label{Conform-example-conform-Delaunay} \end{figure} \begin{figure}[htbp] -\begin{ccTexOnly} \begin{center} +\begin{ccTexOnly} \includegraphics[width=8cm]{Mesh_2/example-conform-Gabriel} -\end{center} \end{ccTexOnly} -\caption{The corresponding conforming Gabriel triangulation.} -\label{Conform-example-conform-Gabriel} - \begin{ccHtmlOnly} -
-
\end{ccHtmlOnly} +\end{center} +\caption{The corresponding conforming Gabriel triangulation.} +\label{Conform-example-conform-Gabriel} \end{figure} \section{Meshes} @@ -179,93 +169,81 @@ meshed (holes). See figures~\ref{Domain} and~\ref{Domain-mesh} for an example of a domain defined without using seed points, and a possible mesh of it. See figure~\ref{Domain-seeds} for another domain defined with the same {\sc - Pslg} and two seed points. The two seed points define two holes in the -domain. In the corresponding mesh (figure~\ref{Domain-seeds-mesh}), these + Pslg} and two seed points used to define holes. +In the corresponding mesh (figure~\ref{Domain-seeds-mesh}), these two holes are triangulated but not meshed. \begin{figure}[htbp] -\begin{ccTexOnly} \begin{center} +\begin{ccTexOnly} \includegraphics[width=8cm]{Mesh_2/domain} -\end{center} \end{ccTexOnly} -\caption{A domain defined without seed points.} -\label{Domain} - \begin{ccHtmlOnly} -
-
\end{ccHtmlOnly} +\end{center} +\caption{A domain defined without seed points.} +\label{Domain} \end{figure} \begin{figure}[htbp] -\begin{ccTexOnly} \begin{center} +\begin{ccTexOnly} \includegraphics[width=8cm]{Mesh_2/domain-mesh} -\end{center} \end{ccTexOnly} -\caption{A mesh of the domain defined without seed points.} -\label{Domain-mesh} - \begin{ccHtmlOnly} -
-
\end{ccHtmlOnly} +\end{center} +\caption{A mesh of the domain defined without seed points.} +\label{Domain-mesh} \end{figure} \begin{figure}[htbp] -\begin{ccTexOnly} \begin{center} +\begin{ccTexOnly} \includegraphics[width=8cm]{Mesh_2/domain-seeds} -\end{center} \end{ccTexOnly} -\caption{A domain with two seeds points defining holes.} -\label{Domain-seeds} - \begin{ccHtmlOnly} -
-
\end{ccHtmlOnly} +\end{center} +\caption{A domain with two seeds points defining holes.} +\label{Domain-seeds} \end{figure} \begin{figure}[htbp] -\begin{ccTexOnly} \begin{center} +\begin{ccTexOnly} \includegraphics[width=8cm]{Mesh_2/domain-seeds-mesh} -\end{center} \end{ccTexOnly} -\caption{A mesh of the domain with seeds defining holes.} -\label{Domain-seeds-mesh} - \begin{ccHtmlOnly} -
-
\end{ccHtmlOnly} +\end{center} +\caption{A mesh of the domain with two seeds defining holes.} +\label{Domain-seeds-mesh} \end{figure} \subsection{Shape and Size Criteria} \label{sec:Mesh_2_criteria} -The shape criterion on triangles is a lower bound $B$ on the ratio +The shape criterion for triangles is a lower bound $B$ on the ratio between the circumradius and the shortest edge length. Such a bound implies a lower bound of $\arcsin{\frac{1}{2B}}$ on the minimum angle of the triangle and an upper bound of $\pi - 2* \arcsin{\frac{1}{2B}}$ on the maximum angle. Unfortunately, the termination of the algorithm -is guaranteed only if $B \ge \sqrt{2}$ which corresponds to a lower -bound of $20.7$~degrees on the angles. +is guaranteed only if $B \ge \sqrt{2}$, which corresponds to a lower +bound of $20.7$~degrees over the angles. The size criterion can be any criterion that tends to prefer small triangles. For example, the size criterion can be an upper bound on the length of longest edge of triangles, or an upper bound on the radius of the -circumcircle. The size bound can be varying over the domain. For example, +circumcircle. The size bound can vary over the domain. For example, the size criterion could impose a small size for the triangles intersecting a given line. @@ -278,21 +256,21 @@ The input to a meshing problem is a {\sc Pslg} and a set of seeds describing the domain to be meshed, and a set of size and shape criteria. The algorithm implemented in this package starts with a constrained Delaunay triangulation of the input {\sc Pslg} and produces a -mesh using the Delaunay refinement method. That method inserts points into -the triangulation, as far as possible from other points, and stops when the +mesh using the Delaunay refinement method. This method inserts new vertices to +the triangulation, as far as possible from other vertices, and stops when the criteria are satisfied. If all angles between incident segments of the input {\sc Pslg} are greater than $60$~degrees and if the bound on the circumradius/edge ratio is greater than $\sqrt{2}$, -the algorithm is guaranteed to end up with a mesh +the algorithm is guaranteed to terminate with a mesh satisfying the size and shape criteria. If some input angles are smaller than $60$~degrees, the algorithm will -end up with a mesh in which some triangles near small input angles -violate the criteria. This is unavoidable since small angles formed +end up with a mesh in which some triangles violate the criteria near small +input angles. This is unavoidable since small angles formed by input segments cannot be suppressed. Furthermore, it has been -proven (\cite{s-mgdsa-00}), that some domains with small input angles +shown (\cite{s-mgdsa-00}), that some domains with small input angles cannot be meshed with angles even smaller than the small input angles. Note that if the domain is a polygonal region, the resulting mesh will satisfy size and shape criteria except for the small input angles. @@ -307,7 +285,7 @@ constrained Delaunay triangulations by calling the global function \\ \ccc{template void refine_Delaunay_mesh_2 (CDT &t, typename CDT::Geom_traits gt)}. \\ The template parameter \ccc{CDT} must be instantiated by a constrained -Delaunay triangulation class that is a model of the concept +Delaunay triangulation class, which is a model of the concept \ccc{ConstrainedDelaunayTriangulation_2}. In order to override the domain, a version of this function has two more arguments that define a sequence of seed points. @@ -318,22 +296,23 @@ refines the concept \ccc{ConformingDelaunayTriangulationTraits_2} adding the geometric predicates and constructors. The template parameter \ccc{Criteria} must be a model of \ccc{MeshingCriteria_2}. This concept defines criteria that the triangles have to satisfy. -\cgal\ provides several models for this concept such as: +\cgal\ provides two models for this concept: \begin{itemize} \item \ccc{Delaunay_mesh_criteria_2}, that defines a shape criterion that bounds the minimum angle of triangles, -\item \ccc{Delaunay_mesh_size_criteria_2}, that adds to the previous one a - bound on the maximum edge length. +\item \ccc{Delaunay_mesh_size_criteria_2}, that adds to the previous +criterion a bound on the maximum edge length. \end{itemize} If the function \ccc{refine_Delaunay_mesh_2} is called several times on the -same triangulation with different criteria, the algorithm will rebuild used -internal data at every call. In order to avoid that, the advanced user can -use the class \ccc{Delaunay_mesher_2}. That class provides also step -by step functions. Those functions insert one point at a time. +same triangulation with different criteria, the algorithm rebuilds the +internal data structure used for meshing at every call. In order to avoid +rebuild the data structure at every call, the advanced user can +use the class \ccc{Delaunay_mesher_2}. This class provides also step +by step functions. Those functions insert one vertex at a time. Any object of type \ccc{Delaunay_mesher_2} is constructed from a -reference to a \ccc{CDT} and it has several member functions to define the +reference to a \ccc{CDT}, and has several member functions to define the domain to be meshed and to mesh the \ccc{CDT}. See the example given below and the reference manual for details. Note that the \ccc{CDT} should not be externally modified during the life time of the \ccc{Delaunay_mesher_2} @@ -343,9 +322,9 @@ object. The following example inserts several segments into a constrained triangulation and then meshes it using the global function -\ccc{refine_Delaunay_mesh_2}. The size and shape criteria are the defaults +\ccc{refine_Delaunay_mesh_2}. The size and shape criteria are the default ones provided by the criteria class \ccc{Delaunay_mesh_criteria_2}. No seeds are -given, meaning that the mesh domain covers the whole plane except for the +given, meaning that the mesh domain covers the whole plane except the unbounded component. \ccIncludeExampleCode{Mesh_2/mesh_global.C} @@ -353,7 +332,7 @@ unbounded component. \subsection{Example Using the Class \protect\ccc{Delaunay_mesher_2}} This example uses the class \ccc{Delaunay_mesher_2} and calls - the \ccc{refine_mesh()} member function twice changing the size and + the \ccc{refine_mesh()} member function twice, changing the size and shape criteria in between. In such a case, using twice the global function \ccc{refine_Delaunay_mesh_2} would be less efficient, because some internal structures needed by the algorithm would be @@ -365,7 +344,7 @@ This example uses the class \ccc{Delaunay_mesher_2} and calls This example uses the global function \ccc{refine_Delaunay_mesh_2} but defines a domain by using one seed. The size and shape criteria are the -defaults provided by the criteria class \ccc{Delaunay_mesh_criteria_2}. +default ones provided by the criteria class \ccc{Delaunay_mesh_criteria_2}. \ccIncludeExampleCode{Mesh_2/mesh_with_seeds.C} diff --git a/Mesh_2/doc_tex/Mesh_2_ref/Delaunay_mesh_criteria_2.tex b/Mesh_2/doc_tex/Mesh_2_ref/Delaunay_mesh_criteria_2.tex index ac5e3ad3e27..33c7cc4de80 100644 --- a/Mesh_2/doc_tex/Mesh_2_ref/Delaunay_mesh_criteria_2.tex +++ b/Mesh_2/doc_tex/Mesh_2_ref/Delaunay_mesh_criteria_2.tex @@ -11,7 +11,7 @@ which is the best bound one can use with the guarantee that the refinement algorithm will terminate. The upper bound $B$ is related to a lower bound $\alpha_{min}$ on the minimum angle in the triangle: \begin{displaymath} - \sin{ \alpha_{min} } = \frac{1}{4 B^2} + \sin{ \alpha_{min} } = \frac{1}{2 B} \end{displaymath} so $B=\sqrt{2}$ corresponds to $\alpha_{min} \ge 20.7$ degrees. diff --git a/Mesh_2/doc_tex/Mesh_2_ref/Delaunay_mesh_size_criteria_2.tex b/Mesh_2/doc_tex/Mesh_2_ref/Delaunay_mesh_size_criteria_2.tex index 311e0c89adf..f5d38d965f7 100644 --- a/Mesh_2/doc_tex/Mesh_2_ref/Delaunay_mesh_size_criteria_2.tex +++ b/Mesh_2/doc_tex/Mesh_2_ref/Delaunay_mesh_size_criteria_2.tex @@ -11,7 +11,7 @@ which is the best bound one can use with the guarantee that the refinement algorithm will terminate. The upper bound $B$ is related to a lower bound $\alpha_{min}$ on the minimum angle in the triangle: \begin{displaymath} - \sin{ \alpha_{min} } = \frac{1}{4 B^2} + \sin{ \alpha_{min} } = \frac{1}{2 B} \end{displaymath} so $B=\sqrt{2}$ corresponds to $\alpha_{min} \ge 20.7$ degrees.