merge candidate package into trunk

This commit is contained in:
Sébastien Loriot 2010-12-08 17:39:30 +00:00
parent b3687d7b64
commit d1ab01a9b0
35 changed files with 3700 additions and 73 deletions

21
.gitattributes vendored
View File

@ -213,6 +213,27 @@ Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha_shapes_3_large.png -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha_shapes_3_small.png -text Alpha_shapes_3/doc_tex/Alpha_shapes_3/alpha_shapes_3_small.png -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3/alphashape.gif -text svneol=unset#image/gif Alpha_shapes_3/doc_tex/Alpha_shapes_3/alphashape.gif -text svneol=unset#image/gif
Alpha_shapes_3/doc_tex/Alpha_shapes_3/alphashape.pdf -text svneol=unset#application/pdf Alpha_shapes_3/doc_tex/Alpha_shapes_3/alphashape.pdf -text svneol=unset#application/pdf
Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.pdf -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3/classif.png -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3/gen-reg-ex.png -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeCellBase_3.tex -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeTraits_3.tex -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedAlphaShapeVertexBase_3.tex -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/FixedWeightedAlphaShapeTraits_3.tex -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_3.tex -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_cell_base_3.tex -text
Alpha_shapes_3/doc_tex/Alpha_shapes_3_ref/Fixed_alpha_shape_vertex_base_3.tex -text
Alpha_shapes_3/examples/Alpha_shapes_3/ex_fixed_weighted_alpha_shapes_3.cpp -text
Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_3.h -text
Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_cell_base_3.h -text
Alpha_shapes_3/include/CGAL/Fixed_alpha_shape_vertex_base_3.h -text
Alpha_shapes_3/include/CGAL/internal/Classification_type.h -text
Alpha_shapes_3/test/Alpha_shapes_3/Filtered_weighted_alpha_shape_euclidean_traits_3.h -text
Alpha_shapes_3/test/Alpha_shapes_3/copy_tds.h -text
Alpha_shapes_3/test/Alpha_shapes_3/data/small-exp.in -text
Alpha_shapes_3/test/Alpha_shapes_3/data/small.in -text
Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3.cmd -text
Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3.cpp -text
Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-both_vertices.gif -text svneol=unset#image/gif Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-both_vertices.gif -text svneol=unset#image/gif
Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-both_vertices_bw.png -text svneol=unset#image/png Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-both_vertices_bw.png -text svneol=unset#image/png
Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-entire_edge.gif -text svneol=unset#image/gif Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-entire_edge.gif -text svneol=unset#image/gif

5
.gitignore vendored
View File

@ -41,6 +41,11 @@ Alpha_shapes_3/demo/Alpha_shapes_3/*.vcproj
Alpha_shapes_3/demo/Alpha_shapes_3/Makefile Alpha_shapes_3/demo/Alpha_shapes_3/Makefile
Alpha_shapes_3/demo/Alpha_shapes_3/alpha_shapes_3 Alpha_shapes_3/demo/Alpha_shapes_3/alpha_shapes_3
Alpha_shapes_3/demo/Alpha_shapes_3/weighted_alpha_shapes_3 Alpha_shapes_3/demo/Alpha_shapes_3/weighted_alpha_shapes_3
Alpha_shapes_3/test/Alpha_shapes_3/CMakeLists.txt
Alpha_shapes_3/test/Alpha_shapes_3/cgal_test_with_cmake
Alpha_shapes_3/test/Alpha_shapes_3/test_alpha_shape_3
Alpha_shapes_3/test/Alpha_shapes_3/test_fixed_alpha_shape_3
Alpha_shapes_3/test/Alpha_shapes_3/test_weighted_alpha_shape_3
Apollonius_graph_2/demo/Apollonius_graph_2/*.exe Apollonius_graph_2/demo/Apollonius_graph_2/*.exe
Apollonius_graph_2/demo/Apollonius_graph_2/*.vcproj Apollonius_graph_2/demo/Apollonius_graph_2/*.vcproj
Apollonius_graph_2/demo/Apollonius_graph_2/Makefile Apollonius_graph_2/demo/Apollonius_graph_2/Makefile

View File

@ -1,11 +1,18 @@
\begin{ccPkgDescription}{3D Alpha Shapes\label{Pkg:AlphaShapes3}} \begin{ccPkgDescription}{3D Alpha Shapes\label{Pkg:AlphaShapes3}}
\ccPkgHowToCiteCgal{cgal:dy-as3-10} \ccPkgHowToCiteCgal{cgal:dy-as3-10}
\ccPkgSummary{This package offers a data structure encoding the whole family of alpha-complexes \ccPkgSummary{
related to a given 3D Delaunay or regular triangulation. In particular, the data structure This package offers a data structure encoding
either one alpha-complex or
the whole family of alpha-complexes
related to a given 3D Delaunay or regular triangulation.
% In particular,
In the latter case,
the data structure
allows to retrieve the alpha-complex for any alpha value, the whole spectrum of critical allows to retrieve the alpha-complex for any alpha value, the whole spectrum of critical
alpha values and a filtration on the triangulation faces (this filtration is based on the first alpha values and a filtration on the triangulation faces (this filtration is based on the first
alpha value for which each face is included on the alpha-complex).} alpha value for which each face is included on the alpha-complex).
}
\ccPkgDependsOn{\ccRef[2D Triangulation]{Pkg:Triangulation3}} \ccPkgDependsOn{\ccRef[2D Triangulation]{Pkg:Triangulation3}}
\ccPkgIntroducedInCGAL{2.3} \ccPkgIntroducedInCGAL{2.3}

View File

@ -72,22 +72,47 @@ The alpha complex is a subcomplex
of the Delaunay triangulation. of the Delaunay triangulation.
For a given value of $\alpha$, the alpha complex includes For a given value of $\alpha$, the alpha complex includes
all the simplices in the Delaunay triangulation which have all the simplices in the Delaunay triangulation which have
an empty circumsphere with squared radius equal or smaller than $\alpha$. an empty circumscribing sphere with squared radius equal or smaller than $\alpha$.
Here ``empty'' means that the open sphere Here ``empty'' means that the open sphere
do not include any points of $S$. do not include any points of $S$.
The alpha shape is then simply the domain covered by the simplices The alpha shape is then simply the domain covered by the simplices
of the alpha complex (see \cite{em-tdas-94}). of the alpha complex (see \cite{em-tdas-94}).
In general, an alpha complex is a non-connected and non-pure complex. In general, an alpha complex is a disconnected and non-pure complex:
This means in particular that the alpha complex may have This means in particular that the alpha complex may have
singular faces. For $0 \leq k \leq d-1$, singular faces. For $0 \leq k \leq d-1$,
a $k$-simplex of the alpha complex is said to be a $k$-simplex of the alpha complex is said to be
singular if it is not a facet of a $(k+1)$-simplex of the complex singular if it is not a facet of a $(k+1)$-simplex of the complex.
CGAL provides two versions of the alpha shapes. In the general mode, CGAL provides two versions of alpha shapes. In the general mode,
the alpha shapes correspond strictly to the above definition. the alpha shapes correspond strictly to the above definition.
The regularized mode provides a regularized version of the alpha shapes The regularized mode provides a regularized version of the alpha shapes.
corresponding to the domain covered by a regularized version It corresponds to the domain covered by a regularized version
of the alpha complex where singular faces are removed. of the alpha complex where singular faces are removed
(See Figure \ref{fig-gen-reg-ex} for an example).
\begin{figure}
\begin{ccTexOnly}
\begin{center}
\includegraphics[width=15cm]{Alpha_shapes_3/gen-reg-ex.png}
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img border=0 src="./gen-reg-ex.png" alt="General vs. regularized alpha-shape">
</CENTER>
\end{ccHtmlOnly}
\caption{Comparison of general and regularized alpha-shape.
\textbf{Left:} Some points are taken on the surface of a torus,
three points being taken relatively
far from the surface of the torus;
\textbf{Middle:} The general alpha-shape (for a large enough alpha value)
contains the singular triangle facet of the three isolated points;
\textbf{Right:} The regularized version (for the same value of alpha) does not contains any singular facet.
\label{fig-gen-reg-ex}}
\end{figure}
@ -135,8 +160,8 @@ regular triangulation triangulation
such that there is a sphere orthogonal to the weighted points associated such that there is a sphere orthogonal to the weighted points associated
with the vertices of the simplex and suborthogonal to all the other with the vertices of the simplex and suborthogonal to all the other
input weighted points. Once again the alpha shape is then defined as input weighted points. Once again the alpha shape is then defined as
the domain covered by a the alpha complex and arise in two versions the domain covered by a the alpha complex and comes in general and
general or regularized. regularized versions.
@ -145,6 +170,8 @@ general or regularized.
\section{Functionality \label{I1_SectAlpha_Shape_3}} \section{Functionality \label{I1_SectAlpha_Shape_3}}
\subsection{Family of alpha shapes}
The class \ccc{CGAL::Alpha_shape_3<Dt>} represents the whole The class \ccc{CGAL::Alpha_shape_3<Dt>} represents the whole
family of alpha shapes for a given set of points. family of alpha shapes for a given set of points.
The class includes the underlying triangulation \ccc{Dt} The class includes the underlying triangulation \ccc{Dt}
@ -153,25 +180,10 @@ of the set, and associates to each $k$-face of this triangulation
for which values of $\alpha$ the face belongs to the for which values of $\alpha$ the face belongs to the
alpha complex. alpha complex.
The class provides functions to set and
The class \ccc{CGAL::Alpha_shape_3<Dt>} provides functions to set and
get the current $\alpha$-value, as well as an iterator that enumerates get the current $\alpha$-value, as well as an iterator that enumerates
the $\alpha$ values where the alpha shape changes. the $\alpha$ values where the alpha shape changes.
The class provides member functions to classify for a given value
of $alpha$ the different faces of the triangulation as
\ccc{EXTERIOR}, \ccc{SINGULAR}, \ccc{REGULAR} or
\ccc{INTERIOR} with respect
to the alpha shape. A $k$ face on the boundary of the alpha complex
is said to be \ccc{REGULAR} if it is a subface of the alpha complex
which is a subface of some $k+1$ face of the alpha complex
and \ccc{SINGULAR} otherwise.
The class provides also output iterators to get for a given $alpha$ value
the vertices, edges, facets and cells of the different types
(\ccc{EXTERIOR}, \ccc{SINGULAR}, \ccc{REGULAR} or
\ccc{INTERIOR}).
Also the class has a filtration member function that, given Also the class has a filtration member function that, given
an output iterator with \ccc{CGAL::object} an output iterator with \ccc{CGAL::object}
as value type, outputs the faces of the triangulation as value type, outputs the faces of the triangulation
@ -189,30 +201,84 @@ such that the alpha shape satisfies the following two properties~\\
\smallskip \smallskip
The current implementation is static, that is after its construction The current implementation is static, that is after its construction
points cannot be inserted or removed. points cannot be inserted or removed.
\subsection{Alpha shape for a fixed alpha}
Given a value of alpha, the class \ccc{CGAL::Fixed_alpha_shape_3<Dt>} represents one
alpha shape for a given set of points.
The class includes the underlying triangulation \ccc{Dt}
of the set, and associates to each $k$-face of this triangulation
a classification type.
\smallskip
The current implementation of this class is dynamic, that is after its construction
points can be inserted or removed.
\subsection{Classification and iterators}
Both classes provide member functions to classify for a (given) value
of $alpha$ the different faces of the triangulation as
\ccc{EXTERIOR}, \ccc{SINGULAR}, \ccc{REGULAR} or
\ccc{INTERIOR} with respect
to the alpha shape. A $k$-face on the boundary of the alpha complex
is said to be: \ccc{REGULAR} if it is a subface of the alpha-complex which
is a subface of a $(k+1)$-face of the alpha complex, and \ccc{SINGULAR} otherwise.
A $k$-face of the alpha complex which is not on the boundary of the alpha complex
is said to be \ccc{INTERIOR}. See Figure \ref{fig-classif} for a 2D illustration.
\begin{figure}
\begin{ccTexOnly}
\begin{center}
\includegraphics[width=15cm]{Alpha_shapes_3/classif}
\end{center}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<CENTER>
<img border=0 src="./classif.png" alt="Classification of simplices.">
</CENTER>
\end{ccHtmlOnly}
\caption{Classification of simplices, a 2D example.
\textbf{Left:} The 2D Delaunay triangulation of a set of points;
\textbf{Right:} Classification of simplices for a given alpha (the squared radius of the red circle).
\ccc{INTERIOR}, \ccc{REGULAR} and \ccc{SINGULAR} simplices are depicted in black, green and blue
respectively. \ccc{EXTERIOR} simplices are not depicted. The vertex \ccc{s} and the edge \ccc{tu} are \ccc{SINGULAR}
since all higher dimension simplices they are incident to are \ccc{EXTERIOR}.
The facet \ccc{pqr} is \ccc{EXTERIOR} because the squared radius of its circumscribed circle is larger
than alpha.
\label{fig-classif}}
\end{figure}
The classes provide also output iterators to get for a given $alpha$ value
the vertices, edges, facets and cells of the different types
(\ccc{EXTERIOR}, \ccc{SINGULAR}, \ccc{REGULAR} or
\ccc{INTERIOR}).
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\section{Concepts and Models\label{I1_SectDtClass3D}} \section{Concepts and Models\label{I1_SectDtClass3D}}
We currently do not specify concepts for the underlying triangulation We currently do not specify concepts for the underlying triangulation
type. Models that work for a basic alpha-shape are the instantiations type. Models that work for a familly alpha-shapes are the instantiations
of the classes \ccc{CGAL::Delaunay_triangulation_3} and of the classes \ccc{CGAL::Delaunay_triangulation_3} and
\ccc{CGAL::Periodic_3_Delaunay_triangulation_3} (see \ccc{CGAL::Periodic_3_Delaunay_triangulation_3} (see
example~\ref{l1_SectPeriodicAS3D}). example~\ref{l1_SectPeriodicAS3D}). A model that works for a fixed alpha-shape are the instantiations
of the class \ccc{CGAL::Delaunay_triangulation_3}.
A model that works for a weighted alpha-shape is A model that works for a weighted alpha-shape is
the class \ccc{CGAL::Regular_triangulation_3}. the class \ccc{CGAL::Regular_triangulation_3}. The triangulation needs a geometric traits class
and a triangulation data structure as template parameters.
The triangulation needs a geometric traits class as argument. For the class \ccc{CGAL::Alpha_shape_3<Dt>}, the requirements of
The requirements of this class are described in the the traits class are described in the concepts \ccc{CGAL::AlphaShapeTraits_3}
concept \ccc{CGAL::AlphaShapeTraits_3} for which in the non-weighted case and \ccc{CGAL::WeightedAlphaShapeTraits_3} in the weighted case.
the \cgal\ kernels are models in the non-weighted case, and for which The \cgal\ kernels are models in the non-weighted case, and
the class \ccc{CGAL::Regular_triangulation_euclidean_traits_3} is model the class \ccc{CGAL::Regular_triangulation_euclidean_traits_3} is a model
in the weighted case. in the weighted case.
The triangulation data structure of the triangulation
The triangulation data structure of the triangulation with any has to be a model of the concept \ccc{CGAL::TriangulationDataStructure_3},
has to be a model of the concept \ccc{CGAL::TriangulationDataStructure_3}. and it must be parameterized with vertex and cell classes, which are model of the concepts
However it must be parameterized with
vertex and cell classes, which are models of the concepts
\ccc{AlphaShapeVertex_3} and \ccc{AlphaShapeCell_3}. \ccc{AlphaShapeVertex_3} and \ccc{AlphaShapeCell_3}.
The package provides by default the classes The package provides by default the classes
\ccc{CGAL::Alpha_shape_vertex_base_3<Gt>} and \ccc{CGAL::Alpha_shape_vertex_base_3<Gt>} and
@ -225,6 +291,51 @@ triangulation the vertex and cell classes need to be models to both
(see example~\ref{l1_SectPeriodicAS3D}). (see example~\ref{l1_SectPeriodicAS3D}).
For the class \ccc{CGAL::Fixed_alpha_shape_3<Dt>}, the requirements of
the traits class are described in the concepts \ccc{CGAL::FixedAlphaShapeTraits_3}
in the non-weighted case and \ccc{CGAL::FixedWeightedAlphaShapeTraits_3} in the weighted case.
The \cgal\ kernels are models in the non-weighted case, and
the class \ccc{CGAL::Regular_triangulation_euclidean_traits_3} is a model
in the weighted case.
The triangulation data structure of the triangulation
has to be a model of the concept \ccc{CGAL::TriangulationDataStructure_3},
and it must be parameterized with vertex and cell classes, which are model of the concepts
\ccc{FixedAlphaShapeVertex_3} and \ccc{FixedAlphaShapeCell_3}.
The package provides models \ccc{CGAL::Fixed_alpha_shape_vertex_base_3<Gt>}
and \ccc{CGAL::Fixed_alpha_shape_cell_base_3<Gt>}, respectively.
\section{\ccc{Alpha_shape_3} or \ccc{Fixed_alpha_shape_3}}
The class \ccc{CGAL::Alpha_shape_3<Dt>} represents the whole family
of alpha shapes for a given set of points while the class \ccc{CGAL::Fixed_alpha_shape_3<Dt>}
represents only one alpha shape (for a fixed alpha). When using the same kernel,
\ccc{CGAL::Fixed_alpha_shape_3<Dt>} being a lighter version, it is naturally much more efficient
when the alpha-shape is needed for a single given value of alpha.
In addition note that the class \ccc{CGAL::Alpha_shape_3<Dt>}
requires constructions (squared radius of simplices) while the
class \ccc{CGAL::Fixed_alpha_shape_3<Dt>} uses only predicates.
This implies that a certified construction of one (several)
alpha-shape, using the \ccc{CGAL::Alpha_shape_3<Dt>} requires a kernel
with exact predicates and exact constructions while using a kernel
with exact predicates is sufficient for the class \ccc{CGAL::Fixed_alpha_shape_3<Dt>}.
This makes the class \ccc{CGAL::Fixed_alpha_shape_3<Dt>} even more efficient in this setting.
In addition, note that the \ccc{Fixed} version is the only of the
two that supports incremental insertion and removal of points.
We give the time spent while computing the alpha shape of a protein (considered
as a set of weighted points) featuring 4251 atoms (using \ccc{gcc 4.3} under Linux with \ccc{-O3}
and \ccc{-DNDEBUG} flags, on a 2.27GHz Intel(R) Xeon(R) E5520 CPU):
Using \ccc{CGAL::Exact_predicates_inexact_constructions_kernel}, building
the regular triangulation requires 0.06s, then the class \ccc{CGAL::Fixed_alpha_shape_3<Dt>}
required 0.05s while the class \ccc{CGAL::Alpha_shape_3<Dt>} requires 0.35s.
%---------------------------------------------------------------------- %----------------------------------------------------------------------
\section{Examples} \section{Examples}
@ -241,7 +352,7 @@ as underlying triangulation.
When many points are input in the alpha shape, say more than 10 000, When many points are input in the alpha shape, say more than 10 000,
it may pay off to use a Delaunay triangulation with \ccc{Fast_location} it may pay off to use a Delaunay triangulation with \ccc{Fast_location}
policy as underlying triangulation in order to speed up point location policy as underlying triangulation in order to speed up point location
quesries (cf. \ref{Triangulation3-sec-locpol}). queries (cf. \ref{Triangulation3-sec-locpol}).
\ccIncludeExampleCode{Alpha_shapes_3/ex_alpha_shapes_with_fast_location_3.cpp} \ccIncludeExampleCode{Alpha_shapes_3/ex_alpha_shapes_with_fast_location_3.cpp}
%---------------------------------------------------------------------- %----------------------------------------------------------------------
@ -255,6 +366,12 @@ The alpha shape is built in \ccc{GENERAL} mode.
\ccIncludeExampleCode{Alpha_shapes_3/ex_weighted_alpha_shapes_3.cpp} \ccIncludeExampleCode{Alpha_shapes_3/ex_weighted_alpha_shapes_3.cpp}
\subsection{Example for Fixed Weighted Alpha-Shapes\label{I1_SectFxWeightedAS3D}}
Same example as previous but using a fixed value of alpha.
\ccIncludeExampleCode{Alpha_shapes_3/ex_fixed_weighted_alpha_shapes_3.cpp}
\subsection{Example for periodic \subsection{Example for periodic
Alpha Shapes\label{l1_SectPeriodicAS3D}} Alpha Shapes\label{l1_SectPeriodicAS3D}}
@ -277,3 +394,5 @@ kernel needs to be used to compute the alpha shapes. Otherwise the
results will suffer from round-off problems. results will suffer from round-off problems.
\ccIncludeExampleCode{Alpha_shapes_3/ex_periodic_alpha_shapes_3.cpp} \ccIncludeExampleCode{Alpha_shapes_3/ex_periodic_alpha_shapes_3.cpp}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

@ -5,7 +5,8 @@
\ccUserChapter{3D Alpha Shapes\label{I1_ChapterAlphashapes3D}} \ccUserChapter{3D Alpha Shapes\label{I1_ChapterAlphashapes3D}}
\ccChapterAuthor{Tran Kai Frank Da \and Mariette Yvinec} \ccChapterAuthor{Tran Kai Frank Da \and
S\'ebastien Loriot \and Mariette Yvinec}
\input{Alpha_shapes_3/PkgDescription} \input{Alpha_shapes_3/PkgDescription}

View File

@ -74,12 +74,12 @@ provides the following.
\ccNestedType{Compute_squared_radius_3} \ccNestedType{Compute_squared_radius_3}
{An object constructor able to compute: \\ {An object constructor able to compute: \\
the squared radius of the the squared radius of the
smallest circumsphere of 4 points \ccc{p0, p1, p2, p3},\\ smallest circumscribing sphere of 4 points \ccc{p0, p1, p2, p3},\\
the squared radius of the the squared radius of the
smallest circumsphere of 3 points \ccc{p0, p1, p2},\\ smallest circumscribing sphere of 3 points \ccc{p0, p1, p2},\\
the squared radius of the smallest circumsphere the squared radius of the smallest circumscribing sphere
of 2 points \ccc{p0, p1}, \\ of 2 points \ccc{p0, p1}, \\
and also the squared radius of the smallest circumsphere and also the squared radius of the smallest circumscribing sphere
to a single point \ccc{p0} (which is \ccc{NT(0)}).} to a single point \ccc{p0} (which is \ccc{NT(0)}).}

View File

@ -50,7 +50,7 @@
\ccDefinition \ccDefinition
The class \ccClassTemplateName\ represents the family of The class \ccClassTemplateName\ represents the family of
alpha shapes of points in the 3D space for {\em all} positive alpha shapes of points in the 3D space for {\em all} real
$\alpha$. It maintains an underlying triangulation $\alpha$. It maintains an underlying triangulation
of the class \ccc{Dt} which of the class \ccc{Dt} which
represents connectivity and order among its faces. Each represents connectivity and order among its faces. Each
@ -259,7 +259,7 @@ to \ccc{alpha}.}
\ccMethod{Classification_type \ccMethod{Classification_type
classify(Facet f, const FT& alpha = get_alpha()) const;} classify(Facet f, const FT& alpha = get_alpha()) const;}
{Classifies the facet \ccc{e} of the underlying triangulation with {Classifies the facet \ccc{f} of the underlying triangulation with
respect to \ccc{alpha}.} respect to \ccc{alpha}.}
\ccMethod{Classification_type \ccMethod{Classification_type
@ -282,7 +282,7 @@ of the underlying triangulation with respect to \ccc{alpha}.}
const FT& alpha = get_alpha());} const FT& alpha = get_alpha());}
{Write the cells which are of type \ccc{type} for {Write the cells which are of type \ccc{type} for
the alpha value \ccc{alpha} to the sequence the alpha value \ccc{alpha} to the sequence
pointed to by the output iterator \ccc{it}. Return past the end pointed to by the output iterator \ccc{it}. Returns past the end
of the output sequence.} of the output sequence.}
@ -293,7 +293,7 @@ template<class OutputIterator>
const FT& alpha= get_alpha());} const FT& alpha= get_alpha());}
{Write the facets which are of type \ccc{type} for {Write the facets which are of type \ccc{type} for
the alpha value \ccc{alpha} to the sequence the alpha value \ccc{alpha} to the sequence
pointed to by the output iterator \ccc{it}. Return past the end pointed to by the output iterator \ccc{it}. Returns past the end
of the output sequence.} of the output sequence.}
\ccMethod { \ccMethod {
@ -303,17 +303,17 @@ template<class OutputIterator>
const FT& alpha = get_alpha());} const FT& alpha = get_alpha());}
{Write the edges which are of type \ccc{type} for {Write the edges which are of type \ccc{type} for
the alpha value \ccc{alpha} to the sequence the alpha value \ccc{alpha} to the sequence
pointed to by the output iterator \ccc{it}. Return past the end pointed to by the output iterator \ccc{it}. Returns past the end
of the output sequence.} of the output sequence.}
\ccMethod { \ccMethod {
template<class OutputIterator> template<class OutputIterator>
OutputIterator get_alpha_shape_vertices(OutputIterator it, OutputIterator get_alpha_shape_vertices(OutputIterator it,
Classification_type type, Classification_type type,
const FT& alphaget_alpha());} const FT& alpha);}
{Write the vertices which are of type \ccc{type} for {Write the vertices which are of type \ccc{type} for
the alpha value \ccc{alpha} to the sequence the alpha value \ccc{alpha} to the sequence
pointed to by the output iterator \ccc{it}. Return past the end pointed to by the output iterator \ccc{it}. Returns past the end
of the output sequence.} of the output sequence.}
\ccMethod { \ccMethod {
@ -383,7 +383,7 @@ is an internal format.
\ccFunction{Geomview_stream& operator<<(Geomview_stream& W, \ccFunction{Geomview_stream& operator<<(Geomview_stream& W,
const Alpha_shape_3<Dt>& A);} const Alpha_shape_3<Dt>& A);}
{Inserts the alpha shape \ccVar\ for the current alpha value into the Geomview stream \ccc{W}. {Inserts the alpha shape \ccVar\ for the current alpha value into the Geomview stream \ccc{W}.
\ccPrecond The insert operator must be defined for \ccc{Point} and \ccc{Triangle}.} \ccPrecond The insert operator must be defined for \ccc{GT::Point} and \ccc{GT::Triangle}.}
\ccImplementation \ccImplementation

View File

@ -52,7 +52,7 @@
The class \ccRefName\ is the default model for the concept The class \ccRefName\ is the default model for the concept
\ccc{AlphaShapeCell_3}. \ccc{AlphaShapeCell_3}.
The class has to parameters. The traits class \ccc{Traits} The class has two parameters. The traits class \ccc{Traits}
provides the number type for alpha values. provides the number type for alpha values.
The second parameter \ccc{Fb} is a base class instantiated by default The second parameter \ccc{Fb} is a base class instantiated by default
with \ccc{CGAL::Triangulation_cell_base_3<Traits>}. with \ccc{CGAL::Triangulation_cell_base_3<Traits>}.

View File

@ -52,7 +52,7 @@
The class \ccRefName\ is the default model for the concept The class \ccRefName\ is the default model for the concept
\ccc{AlphaShapeVertex_3}. \ccc{AlphaShapeVertex_3}.
The class has to parameters : the traits class \ccc{Traits} The class has two parameters : the traits class \ccc{Traits}
which provides the type for the points or the weighted points. which provides the type for the points or the weighted points.
The second parameter \ccc{Vb} is a base class instantiated by default The second parameter \ccc{Vb} is a base class instantiated by default
with \ccc{CGAL::Triangulation_vertex_base_3<Traits>}. with \ccc{CGAL::Triangulation_vertex_base_3<Traits>}.

View File

@ -0,0 +1,38 @@
\begin{ccRefConcept}{FixedAlphaShapeCell_3}
\ccDefinition
This concept describes the requirements for the base cell of a alpha shape with a fixed value alpha.
\ccRefines
\ccc{TriangulationCellBase_3}.
\ccCreationVariable{f}
\ccCreation
\ccConstructor{Alpha_shape_cell_base_3();}{default constructor.}
\ccGlue
\ccConstructor{Alpha_shape_cell_base_3(const Vertex_handle& v0, const Vertex_handle& v1, const Vertex_handle& v2, const Vertex_handle& v3);}{constructor setting the incident vertices.}
\ccGlue
\ccConstructor{Alpha_shape_cell_base_3(const Vertex_handle& v0, const Vertex_handle& v1, const Vertex_handle& v2, const Vertex_handle& v3,
const Cell_handle& n0, const Cell_handle& n1, const Cell_handle& n2, const Cell_handle& n3);}
{constructor setting the incident vertices and the neighboring cells.}
\ccAccessFunctions
\ccMethod{Classification_type get_classification_type();}{Returns the classification of the cell.}
\ccMethod{Classification_type get_facet_classification_type(int i);}{Returns the classification of the i-th facet of the cell.}
\ccModifiers
\ccMethod{void set_classification_type(Classification_type type);}
{ Sets classification of the cell.}
\ccMethod{void set_facet_classification_type(int i, Classification_type type);}
{Sets the classification of the i-th facet of the cell.}
\end{ccRefConcept}

View File

@ -0,0 +1,62 @@
%----------------------------------------------------------------------
\begin{ccRefConcept} {FixedAlphaShapeTraits_3}
\ccCreationVariable{t}
\ccDefinition
The concept \ccRefName\ describes the requirements
for the geometric traits class
of the underlying Delaunay triangulation of a basic alpha shape with a fixed value alpha.
\ccRefines
\ccc{DelaunayTriangulationTraits_3}
In addition to the requirements described in the concept
\ccc{DelaunayTriangulationTraits_3},
the geometric traits class of a
Delaunay triangulation plugged in a basic alpha shape with fixed alpha value
provides the following.
\ccTypes
\ccNestedType{Comparison_result}{\ccc{CGAL::Comparison_result} or \ccc{Uncertain<CGAL::Comparison_result>}}
\ccNestedType{Compare_squared_radius_3}
{An object constructor able to compare \\
the squared radius of the smallest circumscribing sphere of
either four, three, two or one point(s)
with a given value of alpha.
It provides:\\
\ccc{Comparison_result operator()(Point_3,Point_3,Point_3,Point_3)}\\
\ccc{Comparison_result operator()(Point_3,Point_3,Point_3)}\\
\ccc{Comparison_result operator()(Point_3,Point_3)}\\
\ccc{Comparison_result operator()(Point_3)}\\
}
\ccCreation
\ccCreationVariable{traits}
\ccThree{TriangulationTraits_3xxx();}{Triangulation_traits_3 & tr}{}
\ccThreeToTwo
\ccConstructor{AlphaShapeTraits_3();}{Default constructor.}
\ccAccessFunctions
\ccMethod{Compare_squared_radius_3 compare_squared_radius_3_object();} {}
\ccHasModels
All \ccc{CGAL} kernels.\\
\ccc{CGAL::Exact_predicates_inexact_constructions_kernel} (recommended)\\
\ccc{CGAL::Exact_predicates_exact_constructions_kernel}\\
\ccc{CGAL::Filtered_kernel}\\
\ccc{CGAL::Cartesian}\\
\ccc{CGAL::Simple_cartesian}\\
\ccc{CGAL::Homogeneous}\\
\ccc{CGAL::Simple_homogeneous}
\end{ccRefConcept}

View File

@ -0,0 +1,44 @@
%----------------------------------------------------------------------
\begin{ccRefConcept}{FixedAlphaShapeVertex_3}
\ccDefinition
This concept describes the requirements for the base vertex of a alpha shape with a fixed value alpha.
\ccRefines
\ccc{TriangulationVertexBase_3}.
\ccCreationVariable{v}
\ccTypes
\ccNestedType{Point}
{Must be the same as the point type provided by
the geometric traits class of the triangulation.}
\ccCreation
\ccConstructor{Alpha_shape_vertex_base_3();}{default constructor.}
\ccGlue
\ccConstructor{Alpha_shape_vertex_base_3(Point p);}{constructor setting
the point associated to.}
\ccGlue
\ccConstructor{Alpha_shape_vertex_base_3(Point p, const Cell_handle& c);}
{constructor setting the point associated to and an incident cell.}
\ccAccessFunctions
\ccMethod{bool is_on_chull();}
{Returns a boolean indicating whether the point is on the convex hull of the point of the triangulation.}
\ccMethod{Classification_type get_classification_type();}
{Returns the classification of the vertex.}
\ccModifiers
\ccMethod{void set_classification_type(Classification_type type);}
{Sets the classification of the vertex.}
\ccMethod{void is_on_chull(bool b);}
{Sets whether the vertex is on the convex hull.}
\end{ccRefConcept}

View File

@ -0,0 +1,48 @@
\begin{ccRefConcept}{FixedWeightedAlphaShapeTraits_3}
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[concept]{} %% add further index entries
\ccDefinition
The concept \ccRefName\ describes the requirements
for the geometric traits class of the underlying regular triangulation of a weighted alpha shape with fixed alpha value.
\ccRefines
\ccc{RegularTriangulationTraits_3}
In addition to the requirements described in the concept
\ccc{RegularTriangulationTraits_3},
the geometric traits class of a
Regular triangulation plugged in a weighted alpha shape with fixed alpha value
provides the following.
\ccTypes
\ccNestedType{Comparison_result}{\ccc{CGAL::Comparison_result} or \ccc{Uncertain<CGAL::Comparison_result>}}
\ccNestedType{Compare_weighted_squared_radius_3}
{An object constructor able to compare the squared radius of the
smallest sphere orthogonal to either four, three, two or one weighted point(s)
to a given value of alpha.
It provides:\\
\ccc{Comparison_result operator()(Weighted_point_3 ,Weighted_point_3 ,Weighted_point_3 ,Weighted_point_3 )}\\
\ccc{Comparison_result operator()(Weighted_point_3 ,Weighted_point_3 ,Weighted_point_3 )}\\
\ccc{Comparison_result operator()(Weighted_point_3 ,Weighted_point_3 )}\\
\ccc{Comparison_result operator()(Weighted_point_3 )}\\
}
\ccCreation
\ccCreationVariable{wast} %% choose variable name
\ccConstructor{WeightedAlphaShapeTraits_3();}{default constructor.}
\ccAccessFunctions
\ccMethod{Compare_weighted_squared_radius_3 compare_weighted_squared_radius_3_object();} {}
\ccHasModels
\ccc{CGAL::Regular_triangulation_euclidean_traits_3<K>},
\end{ccRefConcept}

View File

@ -0,0 +1,188 @@
%----------------------------------------------------------------------
\begin{ccRefClass} {Fixed_alpha_shape_3<Dt>}
\ccDefinition
The class \ccClassTemplateName\ represents one (fixed)
alpha shape of points in the 3D space for a real
$\alpha$. It maintains an underlying triangulation
of the class \ccc{Dt} which
represents connectivity and order among its faces. Each
$k$-dimensional face of the \ccc{Dt} is associated with
a classification that specifies its status in the alpha complex, alpha being fixed.
Note that this class can be used at the same time to build a {\em basic} or
a {\em weighted} Alpha Shape\ccIndexMainItem[C]{Weighted_alpha_shapes_3}.
\ccInclude{CGAL/Fixed_alpha_shape_3.h}
\ccInheritsFrom
\ccc{Dt}
This class is the underlying triangulation class.
The modifying functions \ccc{insert} and \ccc{remove} will overwrite
the inherited functions.
\ccTypes
\ccSetThreeColumns{Oriented_side}{}{\hspace*{10cm}}
\ccThreeToTwo
\ccNestedType{Gt}{the alpha shape traits type.}
it has to derive from a triangulation traits class.
For example \ccc{Dt::Point} is a Point class.
\ccTypedef{typedef Gt::FT FT;}{the number type of alpha.}
%\ccNestedType{Alpha_shape_vertices_iterator}{A bidirectional and non-mutable iterator that allow to traverse
%the vertices which belongs to the alpha shape for a fixed $\alpha$.
%\ccPrecond Its \ccc{value_type} is \ccc{Dt::Vertex_handle}}
%\ccNestedType{Alpha_shape_facets_iterator}{A bidirectional and non-mutable iterator that allow to traverse
%the facets which belongs to the alpha shape for a fixed $\alpha$.
%\ccPrecond Its \ccc{value_type} is \ccc{Dt::Facet}}
\ccEnum{enum Classification_type {EXTERIOR, SINGULAR, REGULAR, INTERIOR};}
{Enum to classify the simplices of the underlying
triangulation with respect to a given alpha value.\\
Each k-dimensional simplex of the triangulation
can be classified as EXTERIOR, SINGULAR, REGULAR
or INTERIOR.
A $k$ simplex is REGULAR if it is on the boundary
of the alpha complex and belongs to a $k+1$ simplex in this complex
and it is SINGULAR if it is a boundary simplex that is not included in a $k+1$ simplex of the complex. \\
}
\ccCreation
\ccCreationVariable{A}
\ccConstructor{Alpha_shape_3(FT alpha = 0);}
{Introduces an empty alpha shape data structure
\ccVar\ and set the alpha value to \ccc{alpha}.}
\ccConstructor{ Alpha_shape_3(Dt& dt,FT alpha = 0);}
{Builds an alpha shape from the triangulation \ccc{dt},
and set the alpha value to \ccc{alpha}.
Be careful that this operation destroys the triangulation.}
\ccConstructor{template < class InputIterator >
Alpha_shape_3(
InputIterator first,
InputIterator last,
const FT& alpha = 0);}
{Builds an alpha shape data structure
for the points in the range
$\left[\right.$\ccc{first}, \ccc{last}$\left.\right)$ and
set the alpha value to \ccc{alpha}.
\ccRequire The \ccc{value_type} of \ccc{first} and
\ccc{last} is \ccc{Point} (the type point of the underlying
triangulation.)}
\ccModifiers
\ccMethod{Vertex_handle insert (Point p,Cell_handle start = Cell_handle());}
{
Inserts point p in the underlying triangulation and returns the corresponding vertex.
The optional argument \ccc{start} is used as a starting place for the search.
The classification types of the new simplices are computed and that of the simplices incident
to the new ones are updated.
}
\ccMethod{void remove (Vertex_handle v);}
{
Removes the vertex v from the underlying triangulation.
The classification types of new simplices and their incident faces are set or reset
}
\ccMethod{void
clear();}
{Clears the structure.}
\ccHeading{Query Functions}
\ccMethod{const FT&
get_alpha(void) const;}
{Returns the $\alpha$-value.}
\ccMethod{Classification_type
classify(Cell_handle c) const;}
{Classifies the cell \ccc{c} of the underlying triangulation in the alpha complex.}
\ccMethod{Classification_type classify(Facet f) const;}
{Classifies the facet \ccc{f} of the underlying triangulation in the alpha complex.}
\ccMethod{Classification_type classify(Cell_handle f, int i) const;}
{Classifies the facet of the cell \ccc{f} opposite to the vertex with index
\ccc{i} of the underlying triangulation in the alpha complex.}
\ccMethod{Classification_type classify(const Edge& e) const;}
{Classifies the edge \ccc{e} of the underlying triangulation in the alpha complex. }
\ccMethod{Classification_type classify(Vertex_handle v) const;}
{Classifies the vertex \ccc{v} of the underlying triangulation in the alpha complex.}
\ccMethod {template<class OutputIterator>
OutputIterator get_alpha_shape_cells(OutputIterator it, Classification_type type);}
{Writes the cells which are of type \ccc{type} in the alpha complex
to the sequence
pointed to by the output iterator \ccc{it}. Returns past the end
of the output sequence.}
\ccMethod {
template<class OutputIterator>
OutputIterator get_alpha_shape_facets(OutputIterator it, Classification_type type);}
{Writes the facets which are of type \ccc{type} in the alpha complex
to the sequence pointed to by the output iterator \ccc{it}. Returns past the end
of the output sequence.}
\ccMethod {
template<class OutputIterator>
OutputIterator get_alpha_shape_edges(OutputIterator it, Classification_type type);}
{Writes the edges which are of type \ccc{type} in the alpha complex
to the sequence
pointed to by the output iterator \ccc{it}. Returns past the end
of the output sequence.}
\ccMethod {
template<class OutputIterator>
OutputIterator get_alpha_shape_vertices(OutputIterator it, Classification_type type);}
{Writes the vertices which are of type \ccc{type} in the alpha complex
to the sequence pointed to by the output iterator \ccc{it}. Returns past the end
of the output sequence.}
\ccHeading{I/O}
The I/O operators are defined for \ccc{iostream}, and for
the window stream provided by \cgal. The format for the iostream
is an internal format.
\ccInclude{CGAL/IO/io.h}
\ccFunction{ostream& operator<<(ostream& os,
const Alpha_shape_3<Dt>& A);}
{Inserts the alpha shape \ccVar\ for the alpha value of \ccc{A} into the stream \ccc{os}.
\ccRequire The insert operator must be defined for \ccc{GT::Point}.}
\ccInclude{CGAL/IO/Geomview_stream.h}
\ccInclude{CGAL/IO/alpha_shape_geomview_ostream_3.h}
\ccFunction{Geomview_stream& operator<<(Geomview_stream& W,
const Alpha_shape_3<Dt>& A);}
{Inserts the alpha shape \ccVar\ into the Geomview stream \ccc{W}.
\ccRequire The insert operator must be defined for \ccc{GT::Point} and \ccc{GT::Triangle}.}
\end{ccRefClass}

View File

@ -0,0 +1,26 @@
%----------------------------------------------------------------------
\begin{ccRefClass}{Fixed_alpha_shape_cell_base_3<Traits,Fb>}
\ccDefinition
The class \ccRefName\ is the default model for the concept
\ccc{FixedAlphaShapeCell_3}.
The class has two parameters. The traits class \ccc{Traits}
provides the number type for alpha values.
The second parameter \ccc{Fb} is a base class instantiated by default
with \ccc{CGAL::Triangulation_cell_base_3<Traits>}.
\ccInclude{CGAL/Fixed_alpha_shape_cell_base_3.h}
\ccIsModel
\ccc{FixedAlphaShapeCellBase_3}
\ccInheritsFrom
\ccc{Fb}
\end{ccRefClass}

View File

@ -0,0 +1,27 @@
%----------------------------------------------------------------------
\begin{ccRefClass}{Fixed_alpha_shape_vertex_base_3<Traits,Vb>}
\ccDefinition
The class \ccRefName\ is the default model for the concept
\ccc{FixedAlphaShapeVertex_3}.
The class has two parameters : the traits class \ccc{Traits}
which provides the type for the points or the weighted points.
The second parameter \ccc{Vb} is a base class instantiated by default
with \ccc{CGAL::Triangulation_vertex_base_3<Traits>}.
\ccInclude{CGAL/Fixed_alpha_shape_vertex_base_3.h}
\ccIsModel
\ccc{FixedAlphaShapeVertexBase_3}
\ccInheritsFrom
\ccc{Vb}
\end{ccRefClass}

View File

@ -43,7 +43,7 @@ and the squared radius of the
smallest sphere orthogonal to three weighted points \ccc{p0, p1, p2}, smallest sphere orthogonal to three weighted points \ccc{p0, p1, p2},
and the squared radius of smallest sphere orthogonal to and the squared radius of smallest sphere orthogonal to
two weighted points \ccc{p0, p1}, two weighted points \ccc{p0, p1},
and the squared radius of the smallest spere orthogonal to a single and the squared radius of the smallest sphere orthogonal to a single
point \ccc{p0}.} point \ccc{p0}.}
\ccCreation \ccCreation

View File

@ -51,7 +51,8 @@
%\section{Reference pages for Alpha Shapes in 3D} %\section{Reference pages for Alpha Shapes in 3D}
\ccRefChapter{3D Alpha Shapes} \ccRefChapter{3D Alpha Shapes}
\ccChapterAuthor{Tran Kai Frank Da \and Mariette Yvinec} \ccChapterAuthor{Tran Kai Frank Da \and
S\'ebastien Loriot \and Mariette Yvinec}
Alpha shapes definition is based on an underlying Alpha shapes definition is based on an underlying
triangulation that may be a Delaunay triangulation triangulation that may be a Delaunay triangulation
@ -65,7 +66,7 @@ The alpha complex is a subcomplex
of the Delaunay triangulation. of the Delaunay triangulation.
For a given value of $\alpha$, the alpha complex includes For a given value of $\alpha$, the alpha complex includes
all the simplices in the Delaunay triangulation which have all the simplices in the Delaunay triangulation which have
an empty circumsphere with squared radius equal or smaller than $\alpha$. an empty circumscribing sphere with squared radius equal or smaller than $\alpha$.
Here ``empty'' means that the open sphere Here ``empty'' means that the open sphere
do not include any points of $S$. do not include any points of $S$.
The alpha shape is then simply the domain covered by the simplices The alpha shape is then simply the domain covered by the simplices
@ -76,11 +77,6 @@ This means in particular that the alpha complex may have
singular faces. For $0 \leq k \leq d-1$, singular faces. For $0 \leq k \leq d-1$,
a $k$-simplex of the alpha complex is said to be a $k$-simplex of the alpha complex is said to be
singular if it is not a facet of a $(k+1)$-simplex of the complex singular if it is not a facet of a $(k+1)$-simplex of the complex
CGAL provides two versions of the alpha shapes. In the general mode,
the alpha shapes correspond strictly to the above definition.
The regularized mode provides a regularized version of the alpha shapes
corresponding to the domain covered by a regularized version
of the alpha complex where singular faces are removed.
The alpha shapes of a set of points The alpha shapes of a set of points
$S$ form a discrete family, even though they $S$ form a discrete family, even though they
@ -95,7 +91,6 @@ easily. Furthermore, we can select the optimal value
of $\alpha$ to get an alpha shape including all data points of $\alpha$ to get an alpha shape including all data points
and having less than a given number of connected components. and having less than a given number of connected components.
The definition is analog in the case of weighted alpha shapes. The definition is analog in the case of weighted alpha shapes.
The input set is now a set of weighted points (which can be regarded The input set is now a set of weighted points (which can be regarded
as spheres) and the underlying triangulation as spheres) and the underlying triangulation
@ -110,8 +105,16 @@ regular triangulation triangulation
such that there is a sphere orthogonal to the weighted points associated such that there is a sphere orthogonal to the weighted points associated
with the vertices of the simplex and suborthogonal to all the other with the vertices of the simplex and suborthogonal to all the other
input weighted points. Once again the alpha shape is then defined as input weighted points. Once again the alpha shape is then defined as
the domain covered by a the alpha complex and arise in two versions the domain covered by a the alpha complex.
general or regularized.
CGAL provides two versions to compute alpha shapes.
The first one gives access to an explicit classification of all the simplices for a fixed alpha value.
The second one gives access to the entire family of alpha shapes of a set of points.
This latter version comes with two modes. In the general mode,
the alpha shapes correspond strictly to the definition previously made.
The regularized mode provides a regularized version of the alpha shapes
corresponding to the domain covered by a regularized version
of the alpha complex where singular faces are removed.
\section{Classified Reference Pages} \section{Classified Reference Pages}
@ -122,6 +125,10 @@ general or regularized.
\ccRefConceptPage{WeightedAlphaShapeTraits_3} \\ \ccRefConceptPage{WeightedAlphaShapeTraits_3} \\
\ccRefConceptPage{AlphaShapeCell_3}\\ \ccRefConceptPage{AlphaShapeCell_3}\\
\ccRefConceptPage{AlphaShapeVertex_3}\\ \ccRefConceptPage{AlphaShapeVertex_3}\\
\ccRefConceptPage{FixedAlphaShapeTraits_3}\\
\ccRefConceptPage{FixedWeightedAlphaShapeTraits_3} \\
\ccRefConceptPage{FixedAlphaShapeCell_3}\\
\ccRefConceptPage{FixedAlphaShapeVertex_3}\\
\subsection*{Classes} \subsection*{Classes}
@ -130,3 +137,7 @@ general or regularized.
%\ccRefIdfierPage{CGAL::Weighted_alpha_shape_euclidean_traits_3<K>}\\ %\ccRefIdfierPage{CGAL::Weighted_alpha_shape_euclidean_traits_3<K>}\\
\ccRefIdfierPage{CGAL::Alpha_shape_vertex_base_3<Traits,Vb>}\\ \ccRefIdfierPage{CGAL::Alpha_shape_vertex_base_3<Traits,Vb>}\\
\ccRefIdfierPage{CGAL::Alpha_shape_cell_base_3<Traits,Fb>} \ccRefIdfierPage{CGAL::Alpha_shape_cell_base_3<Traits,Fb>}
\ccRefIdfierPage{CGAL::Fixed_alpha_shape_3<Dt>}\\
\ccRefIdfierPage{CGAL::Fixed_alpha_shape_vertex_base_3<Traits,Vb>}\\
\ccRefIdfierPage{CGAL::Fixed_alpha_shape_cell_base_3<Traits,Fb>}

View File

@ -17,4 +17,12 @@
\input{Alpha_shapes_3_ref/WeightedAlphaShapeTraits_3.tex} \input{Alpha_shapes_3_ref/WeightedAlphaShapeTraits_3.tex}
\input{Alpha_shapes_3_ref/Weighted_alpha_shape_euclidean_traits_3.tex} \input{Alpha_shapes_3_ref/Weighted_alpha_shape_euclidean_traits_3.tex}
\input{Alpha_shapes_3_ref/FixedAlphaShapeTraits_3.tex}
\input{Alpha_shapes_3_ref/FixedAlphaShapeCellBase_3.tex}
\input{Alpha_shapes_3_ref/FixedAlphaShapeVertexBase_3.tex}
\input{Alpha_shapes_3_ref/Fixed_alpha_shape_3.tex}
\input{Alpha_shapes_3_ref/Fixed_alpha_shape_cell_base_3.tex}
\input{Alpha_shapes_3_ref/Fixed_alpha_shape_vertex_base_3.tex}
\input{Alpha_shapes_3_ref/FixedWeightedAlphaShapeTraits_3.tex}
%% EOF %% EOF

View File

@ -34,7 +34,7 @@ int main()
// compute alpha shape // compute alpha shape
Alpha_shape_3 as(lp.begin(),lp.end()); Alpha_shape_3 as(lp.begin(),lp.end());
std::cout << "Alpha shape computed in REGULARIZED mode by defaut" std::cout << "Alpha shape computed in REGULARIZED mode by default"
<< std::endl; << std::endl;
// find optimal alpha value // find optimal alpha value

View File

@ -0,0 +1,57 @@
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Regular_triangulation_3.h>
#include <CGAL/Regular_triangulation_euclidean_traits_3.h>
#include <CGAL/Fixed_alpha_shape_3.h>
#include <CGAL/Fixed_alpha_shape_vertex_base_3.h>
#include <CGAL/Fixed_alpha_shape_cell_base_3.h>
#include <list>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Regular_triangulation_euclidean_traits_3<K> Gt;
typedef CGAL::Fixed_alpha_shape_vertex_base_3<Gt> Vb;
typedef CGAL::Fixed_alpha_shape_cell_base_3<Gt> Fb;
typedef CGAL::Triangulation_data_structure_3<Vb,Fb> Tds;
typedef CGAL::Regular_triangulation_3<Gt,Tds> Triangulation_3;
typedef CGAL::Fixed_alpha_shape_3<Triangulation_3> Fixed_alpha_shape_3;
typedef Fixed_alpha_shape_3::Cell_handle Cell_handle;
typedef Fixed_alpha_shape_3::Vertex_handle Vertex_handle;
typedef Fixed_alpha_shape_3::Facet Facet;
typedef Fixed_alpha_shape_3::Edge Edge;
typedef Gt::Weighted_point Weighted_point;
typedef Gt::Bare_point Bare_point;
int main()
{
std::list<Weighted_point> lwp;
//input : a small molecule
lwp.push_back(Weighted_point(Bare_point( 1, -1, -1), 4));
lwp.push_back(Weighted_point(Bare_point(-1, 1, -1), 4));
lwp.push_back(Weighted_point(Bare_point(-1, -1, 1), 4));
lwp.push_back(Weighted_point(Bare_point( 1, 1, 1), 4));
lwp.push_back(Weighted_point(Bare_point( 2, 2, 2), 1));
//build one alpha_shape with alpha=0
Fixed_alpha_shape_3 as(lwp.begin(), lwp.end(), 0);
//explore the 0-shape - It is dual to the boundary of the union.
std::list<Cell_handle> cells;
std::list<Facet> facets;
std::list<Edge> edges;
as.get_alpha_shape_cells(std::back_inserter(cells),
Fixed_alpha_shape_3::INTERIOR);
as.get_alpha_shape_facets(std::back_inserter(facets),
Fixed_alpha_shape_3::REGULAR);
as.get_alpha_shape_facets(std::back_inserter(facets),
Fixed_alpha_shape_3::SINGULAR);
as.get_alpha_shape_edges(std::back_inserter(edges),
Fixed_alpha_shape_3::SINGULAR);
std::cout << " The 0-shape has : " << std::endl;
std::cout << cells.size() << " interior tetrahedra" << std::endl;
std::cout << facets.size() << " boundary facets" << std::endl;
std::cout << edges.size() << " singular edges" << std::endl;
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,76 @@
// Copyright (c) 2009 INRIA Sophia-Antipolis (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you may redistribute it under
// the terms of the Q Public License version 1.0.
// See the file LICENSE.QPL distributed with CGAL.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
//
// Author(s) : Sebastien Loriot
//
#ifndef CGAL_FIXED_ALPHA_SHAPE_CELL_BASE_3_H
#define CGAL_FIXED_ALPHA_SHAPE_CELL_BASE_3_H
#include <vector>
#include <CGAL/Compact_container.h>
#include <CGAL/Triangulation_cell_base_3.h>
#include <CGAL/internal/Classification_type.h>
namespace CGAL {
template < class Gt, class Cb = Triangulation_cell_base_3<Gt> >
class Fixed_alpha_shape_cell_base_3
: public Cb
{
public:
typedef typename Cb::Vertex_handle Vertex_handle;
typedef typename Cb::Cell_handle Cell_handle;
template < typename TDS2 >
struct Rebind_TDS {
typedef typename Cb::template Rebind_TDS<TDS2>::Other Cb2;
typedef Fixed_alpha_shape_cell_base_3<Gt, Cb2> Other;
};
private:
typedef internal::Classification_type Classification_type;
Classification_type facet_status[4];
Classification_type status_;
public:
Fixed_alpha_shape_cell_base_3()
: Cb() {}
Fixed_alpha_shape_cell_base_3(Vertex_handle v0, Vertex_handle v1,
Vertex_handle v2, Vertex_handle v3)
: Cb(v0, v1, v2, v3) {}
Fixed_alpha_shape_cell_base_3(Vertex_handle v0, Vertex_handle v1,
Vertex_handle v2, Vertex_handle v3,
Cell_handle n0, Cell_handle n1,
Cell_handle n2, Cell_handle n3)
: Cb(v0, v1, v2, v3, n0, n1, n2, n3) {}
Classification_type get_facet_classification_type(int i) const {return facet_status[i];}
void set_facet_classification_type(int i, Classification_type status) { facet_status[i]=status; }
Classification_type get_classification_type() { return status_;}
void set_classification_type(Classification_type status) {status_=status;}
};
} //namespace CGAL
#endif // CGAL_FIXED_ALPHA_SHAPE_CELL_BASE_3_H

View File

@ -0,0 +1,75 @@
// Copyright (c) 2009 INRIA Sophia-Antipolis (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you may redistribute it under
// the terms of the Q Public License version 1.0.
// See the file LICENSE.QPL distributed with CGAL.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
//
// Author(s) : Sebastien Loriot
//
#ifndef CGAL_FIXED_ALPHA_SHAPE_VERTEX_BASE_3_H
#define CGAL_FIXED_ALPHA_SHAPE_VERTEX_BASE_3_H
#include <utility>
#include <CGAL/Compact_container.h>
#include <CGAL/Triangulation_vertex_base_3.h>
#include <CGAL/internal/Classification_type.h>
namespace CGAL {
template <class Gt, class Vb = Triangulation_vertex_base_3<Gt> >
class Fixed_alpha_shape_vertex_base_3
: public Vb
{
public:
typedef typename Vb::Cell_handle Cell_handle;
template < typename TDS2 >
struct Rebind_TDS {
typedef typename Vb::template Rebind_TDS<TDS2>::Other Vb2;
typedef Fixed_alpha_shape_vertex_base_3<Gt, Vb2> Other;
};
typedef typename Gt::Point_3 Point;
private:
typedef internal::Classification_type Classification_type;
Classification_type status_;
bool is_on_chull_;
public:
Fixed_alpha_shape_vertex_base_3()
: Vb(),is_on_chull_(false) {}
Fixed_alpha_shape_vertex_base_3(const Point& p)
: Vb(p),is_on_chull_(false) {}
Fixed_alpha_shape_vertex_base_3(const Point& p, Cell_handle c)
: Vb(p, c),is_on_chull_(false) {}
Classification_type get_classification_type() { return status_;}
void set_classification_type(Classification_type status) {status_=status;}
void is_on_chull(bool b){is_on_chull_=b;};
bool is_on_chull(){return is_on_chull_;}
};
} //namespace CGAL
#endif // CGAL_FIXED_ALPHA_SHAPE_VERTEX_BASE_3_H

View File

@ -28,14 +28,15 @@ namespace CGAL {
//------------------ Traits class ------------------------------------- //------------------ Traits class -------------------------------------
#ifndef CGAL_NO_DEPRECATED_CODE #ifdef CGAL_NO_DEPRECATED_CODE
#error The class Weighted_alpha_shape_euclidean_traits_3<K> is deprecated in favor of Regular_triangulation_euclidean_traits_3<K>.
#endif
template <class K> template <class K>
class Weighted_alpha_shape_euclidean_traits_3 : public class Weighted_alpha_shape_euclidean_traits_3 : public
Regular_triangulation_euclidean_traits_3<K> Regular_triangulation_euclidean_traits_3<K>
{}; {};
#endif //CGAL_NO_DEPRECATED_CODE
} //namespace CGAL } //namespace CGAL

View File

@ -0,0 +1,9 @@
#ifndef CGAL_INTERNAL_CLASSIFICATION_TYPE_H
#define CGAL_INTERNAL_CLASSIFICATION_TYPE_H
namespace CGAL{
namespace internal{
enum Classification_type {EXTERIOR,SINGULAR,REGULAR,INTERIOR};
}
}
#endif //CGAL_INTERNAL_CLASSIFICATION_TYPE_H

View File

@ -0,0 +1,302 @@
// Copyright (c) 2009 INRIA Sophia-Antipolis (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you may redistribute it under
// the terms of the Q Public License version 1.0.
// See the file LICENSE.QPL distributed with CGAL.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL: svn+ssh:// $
// $Id: $
//
//
// Author(s) : Sébastien Loriot <Sebastien.Loriot@sophia.inria.fr>
#ifndef CGAL_FILTERED_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H
#define CGAL_FILTERED_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H
#include <CGAL/Regular_triangulation_euclidean_traits_3.h>
#include <boost/shared_ptr.hpp>
namespace CGAL {
namespace internal{
template<template <class T,class W,bool UseFilteredPredicates> class Traits, class Kernel_input, bool mode>
class Alpha_nt{
//NT & kernels
typedef CGAL::Interval_nt<mode> NT_approx;
typedef CGAL::Gmpq NT_exact;
typedef CGAL::Simple_cartesian<NT_approx> Kernel_approx;
typedef CGAL::Simple_cartesian<NT_exact> Kernel_exact;
//Converters
typedef CGAL::Weighted_converter_3< CGAL::Cartesian_converter<Kernel_input,Kernel_approx> > To_approx;
typedef CGAL::Weighted_converter_3< CGAL::Cartesian_converter<Kernel_input,Kernel_exact> > To_exact;
//Traits
typedef Traits<Kernel_input,typename Kernel_input::FT,Kernel_input::Has_filtered_predicates> Input_traits;
typedef Traits<Kernel_approx,NT_approx,Kernel_approx::Has_filtered_predicates> Approx_traits;
typedef Traits<Kernel_exact,NT_exact,Kernel_exact::Has_filtered_predicates> Exact_traits;
//Constructions class
typedef typename Approx_traits::Compute_squared_radius_smallest_orthogonal_sphere_3 Approx_squared_radius;
typedef typename Exact_traits::Compute_squared_radius_smallest_orthogonal_sphere_3 Exact_squared_radius;
//Convertion functions
static
typename Approx_traits::Weighted_point
to_approx(const typename Input_traits::Weighted_point& wp) {
static To_approx converter;
return converter(wp);
}
static
typename Exact_traits::Weighted_point
to_exact(const typename Input_traits::Weighted_point& wp) {
static To_exact converter;
return converter(wp);
}
//members
unsigned nb_pt;
//the members can be updated when calling method exact()
mutable bool updated;
mutable NT_exact exact_;
mutable NT_approx approx_;
typedef std::vector<const typename Input_traits::Weighted_point*> Data_vector;
boost::shared_ptr<Data_vector> inputs_ptr;
//private functions
const Data_vector& data() const{ return *inputs_ptr;}
Data_vector&
data(){ return *inputs_ptr;}
public:
void update_exact() const{
switch (nb_pt){
case 1:
exact_ = -NT_exact( data()[0]->weight() );
break;
case 2:
exact_ = Exact_squared_radius()( to_exact(*data()[0]),to_exact(*data()[1]) );
break;
case 3:
exact_ = Exact_squared_radius()( to_exact(*data()[0]),to_exact(*data()[1]),to_exact(*data()[2]) );
break;
case 4:
exact_ = Exact_squared_radius()( to_exact(*data()[0]),to_exact(*data()[1]),to_exact(*data()[2]),to_exact(*data()[3]) );
break;
default:
assert(false);
}
updated=true;
}
void set_approx(){
switch (nb_pt){
case 1:
approx_ = - NT_approx( data()[0]->weight() );
break;
case 2:
approx_ = Approx_squared_radius()( to_approx(*data()[0]),to_approx(*data()[1]) );
break;
case 3:
approx_ = Approx_squared_radius()( to_approx(*data()[0]),to_approx(*data()[1]),to_approx(*data()[2]) );
break;
case 4:
approx_ = Approx_squared_radius()( to_approx(*data()[0]),to_approx(*data()[1]),to_approx(*data()[2]),to_approx(*data()[3]) );
break;
default:
assert(false);
}
}
const NT_exact& exact() const {
if (!updated){
update_exact();
approx_=to_interval(exact_);
}
return exact_;
}
const NT_approx& approx() const{
return approx_;
}
//Constructors
Alpha_nt():nb_pt(0),updated(true),exact_(0),approx_(0){}
Alpha_nt(const double& d):nb_pt(0),updated(true),exact_(d),approx_(d){}
Alpha_nt(const typename Input_traits::Weighted_point_3& wp1):nb_pt(1),updated(false),inputs_ptr(new Data_vector())
{
data().reserve(nb_pt);
data().push_back(&wp1);
set_approx();
}
Alpha_nt(const typename Input_traits::Weighted_point_3& wp1,
const typename Input_traits::Weighted_point_3& wp2):nb_pt(2),updated(false),inputs_ptr(new Data_vector())
{
data().reserve(nb_pt);
data().push_back(&wp1);
data().push_back(&wp2);
set_approx();
}
Alpha_nt(const typename Input_traits::Weighted_point_3& wp1,
const typename Input_traits::Weighted_point_3& wp2,
const typename Input_traits::Weighted_point_3& wp3):nb_pt(3),updated(false),inputs_ptr(new Data_vector())
{
data().reserve(nb_pt);
data().push_back(&wp1);
data().push_back(&wp2);
data().push_back(&wp3);
set_approx();
}
Alpha_nt(const typename Input_traits::Weighted_point_3& wp1,
const typename Input_traits::Weighted_point_3& wp2,
const typename Input_traits::Weighted_point_3& wp3,
const typename Input_traits::Weighted_point_3& wp4):nb_pt(4),updated(false),inputs_ptr(new Data_vector())
{
data().reserve(nb_pt);
data().push_back(&wp1);
data().push_back(&wp2);
data().push_back(&wp3);
data().push_back(&wp4);
set_approx();
}
};
unsigned& nb_call_total(){
static unsigned n=0;
return n;
}
unsigned& nb_failure(){
static unsigned n=0;
return n;
}
#define COMPARE_FUNCTIONS(CMP) \
template<template <class T,class W,bool b> class Traits, class Kernel_input,bool mode> \
inline \
bool \
operator CMP (const Alpha_nt<Traits,Kernel_input,mode> &a, const Alpha_nt<Traits,Kernel_input,mode> &b) \
{ \
++nb_call_total();\
try{ \
return a.approx() CMP b.approx(); \
} \
catch(CGAL::Uncertain_conversion_exception& e){ \
++nb_failure();\
return a.exact() CMP b.exact(); \
} \
} \
\
template<template <class T,class W,bool b> class Traits, class Kernel_input,bool mode> \
inline \
bool \
operator CMP (const Alpha_nt<Traits,Kernel_input,mode> &a, const double &b) \
{ \
try{ \
return a.approx() CMP b; \
} \
catch(CGAL::Uncertain_conversion_exception& e){ \
return a.exact() CMP b; \
} \
} \
\
template<template <class T,class W,bool b> class Traits, class Kernel_input,bool mode> \
inline \
bool \
operator CMP (const double& a, const Alpha_nt<Traits,Kernel_input,mode> &b) \
{ \
try{ \
return a CMP b.approx(); \
} \
catch(CGAL::Uncertain_conversion_exception& e){ \
return a CMP b.exact(); \
} \
} \
COMPARE_FUNCTIONS(<)
COMPARE_FUNCTIONS(>)
COMPARE_FUNCTIONS(>=)
COMPARE_FUNCTIONS(<=)
COMPARE_FUNCTIONS(==)
COMPARE_FUNCTIONS(!=)
} //namespace internal
//------------------ Traits class -------------------------------------
template <class K,bool mode>
class Filtered_weighted_alpha_shape_euclidean_traits_3: public
Regular_triangulation_euclidean_traits_3<K>
{
typedef internal::Alpha_nt<CGAL::Regular_triangulation_euclidean_traits_3,K,mode> Alpha_nt;
public:
typedef Regular_triangulation_euclidean_traits_3<K> Base;
typedef typename Base::Side_of_bounded_orthogonal_sphere_3
Side_of_bounded_sphere_3;
typedef Alpha_nt FT;
class Compute_squared_radius_3 {
typedef typename Base::Weighted_point Weighted_point_3;
public:
FT operator() (const Weighted_point_3& p,
const Weighted_point_3& q ,
const Weighted_point_3& r,
const Weighted_point_3& s)
{return FT(p,q,r,s);}
FT operator() ( const Weighted_point_3& p,
const Weighted_point_3& q ,
const Weighted_point_3& r)
{return FT(p,q,r); }
FT operator() (const Weighted_point_3& p,
const Weighted_point_3& q )
{return FT(p,q); }
FT operator() (const Weighted_point_3& p)
{return FT(p);}
};
//---------------------------------------------------------------------
Compute_squared_radius_3
compute_squared_radius_3_object() const
{
return Compute_squared_radius_3();
}
//---------------------------------------------------------------------
Side_of_bounded_sphere_3
side_of_bounded_sphere_3_object() const
{
return Side_of_bounded_sphere_3();
}
};
} //namespace CGAL
#endif //CGAL_FILTERED_WEIGHTED_ALPHA_SHAPE_EUCLIDEAN_TRAITS_3_H

View File

@ -0,0 +1,59 @@
//build our internal TDS using the TDS of an already built triangulation
//returns the number of vertices
template <class TDS_src,class TDS_tgt>
void
copy_tds(const TDS_src& src,TDS_tgt& tgt,typename TDS_src::Vertex_handle s_infinite,typename TDS_tgt::Vertex_handle t_infinite)
{
int n = src.number_of_vertices();
if (n == 0) return;
tgt.cells().clear();
tgt.set_dimension(src.dimension());
// Number of pointers to cell/vertex to copy per cell.
int dim = (std::max)(1, tgt.dimension() + 1);
// Create the vertices.
std::vector<typename TDS_src::Vertex_handle> TV(n);
int i = 0;
for (typename TDS_src::Vertex_iterator vit = src.vertices_begin();
vit != src.vertices_end(); ++vit)
TV[i++] = vit;
CGAL_triangulation_assertion( i == n );
std::map< typename TDS_src::Vertex_handle, typename TDS_tgt::Vertex_handle > V;
std::map< typename TDS_src::Cell_handle, typename TDS_tgt::Cell_handle > F;
assert(TV[0]==s_infinite);
assert(tgt.vertices_begin()==t_infinite);
V[ TV[0] ] = t_infinite;
for (i=1; i <= n-1; ++i){
typename TDS_tgt::Vertex_handle vh=
tgt.create_vertex( typename TDS_tgt::Vertex(TV[i]->point()) );
V[ TV[i] ] = vh;
}
// Create the cells.
for (typename TDS_src::Cell_iterator cit = src.cells_begin();
cit != src.cells_end(); ++cit) {
//WE ARE LOOSING ALL INFO INSIDE CELL (HIDDEN POINT ETC...)
F[cit] = tgt.create_cell();
for (int j = 0; j < dim; j++)
F[cit]->set_vertex(j, V[cit->vertex(j)] );
}
// Link the vertices to a cell.
for (typename TDS_src::Vertex_iterator vit2 = src.vertices_begin();
vit2 != src.vertices_end(); ++vit2)
V[vit2]->set_cell( F[vit2->cell()] );
// Hook neighbor pointers of the cells.
for (typename TDS_src::Cell_iterator cit2 = src.cells_begin();
cit2 != src.cells_end(); ++cit2) {
for (int j = 0; j < dim; j++)
F[cit2]->set_neighbor(j, F[cit2->neighbor(j)] );
}
CGAL_triangulation_postcondition( tgt.is_valid() );
}

View File

@ -0,0 +1,506 @@
15.566 -9.825 34.260 3
15.797 -11.159 34.929 3.2
14.795 -12.222 34.440 3.2
15.154 -13.300 33.969 2.8
15.673 -11.028 36.462 3.2
16.000 -9.000 36.000 2.2
16.056 -9.635 36.972 3.2
15.349 -8.650 36.620 2.8
17.055 -9.528 37.725 2.8
13.525 -11.878 34.555 3
12.444 -12.754 34.172 3.2
12.391 -12.861 32.655 3.2
12.000 -12.000 32.000 2.2
12.660 -11.876 31.954 2.8
11.114 -12.178 34.702 3.2
11.138 -12.091 36.234 3.2
9.935 -13.011 34.222 3.2
11.975 -10.953 36.820 3.2
12.107 -14.065 32.164 3
12.107 -14.061 32.164 1.41
12.102 -14.061 32.164 1.41
12.104 -14.062 32.161 1.41
11.975 -14.316 30.735 3.2
10.483 -14.174 30.425 3.2
9.645 -14.759 31.118 2.8
12.442 -15.742 30.368 3.2
12.270 -15.996 28.882 3.2
13.886 -15.938 30.770 3.2
10.142 -13.379 29.417 3
8.742 -13.179 29.067 3.2
8.367 -13.816 27.742 3.2
8.629 -13.257 26.676 2.8
8.397 -11.683 29.045 3.2
8.593 -10.899 30.351 3.2
7.913 -9.560 30.242 3.2
8.022 -11.674 31.518 3.2
7.764 -14.993 27.805 3
7.351 -15.692 26.605 3.2
5.931 -15.254 26.168 3.2
4.961 -15.419 26.903 2.8
7.470 -17.217 26.812 3.2
7.487 -17.504 28.210 2.8
8.774 -17.743 26.238 3.2
5.840 -14.633 24.993 3
4.576 -14.148 24.442 3.2
3.888 -15.098 23.460 3.2
4.502 -15.554 22.497 2.8
4.790 -12.822 23.716 3.2
5.037 -11.629 24.593 3.2
4.433 -10.378 24.002 3.2
4.980 -9.279 24.123 2.8
3.283 -10.536 23.357 3
2.590 -15.316 23.650 3
1.811 -16.178 22.764 3.2
0.476 -15.526 22.334 3.2
-0.220 -14.888 23.139 2.8
1.560 -17.546 23.418 3.2
0.884 -17.436 24.663 2.8
0.125 -15.639 21.037 3
0.925 -16.338 20.015 3.2
1.964 -15.392 19.371 3.2
1.984 -14.194 19.682 2.8
-0.148 -16.790 19.022 3.2
-1.084 -15.609 19.006 3.2
-1.171 -15.193 20.483 3.2
2.838 -15.936 18.516 3
3.865 -15.141 17.832 3.2
3.252 -14.343 16.688 3.2
3.482 -13.142 16.573 2.8
4.963 -16.023 17.319 3.2
2.544 -15.019 15.792 3
1.862 -14.321 14.712 3.2
0.406 -14.593 15.038 3.2
0.090 -15.582 15.720 2.8
2.163 -14.890 13.313 3.2
3.665 -15.067 13.101 3.2
1.637 -13.929 12.251 3.2
4.423 -13.762 13.010 3.2
-0.481 -13.744 14.539 3
-1.904 -13.885 14.805 3.2
-2.680 -13.021 13.818 3.2
-2.194 -11.957 13.395 2.8
-2.164 -13.408 16.231 3.2
-3.596 -13.374 16.677 3.2
-3.602 -12.970 18.427 3.25
-3.000 -12.000 18.000 1.45
-3.650 -11.183 18.362 3.2
-3.880 -13.472 13.459 3
-4.740 -12.738 12.530 3.2
-6.187 -12.642 13.035 3.2
-6.637 -13.459 13.847 2.8
-4.688 -13.377 11.137 3.2
-4.897 -14.779 11.216 2.8
-6.903 -11.628 12.568 3
-8.283 -11.409 12.964 3.2
-8.873 -10.368 12.035 3.2
-8.157 -9.506 11.532 2.8
-8.347 -10.914 14.407 3.2
-10.172 -10.452 11.792 3
-10.836 -9.499 10.915 3.2
-11.327 -8.400 11.828 3.2
-11.441 -8.624 13.033 2.8
-12.030 -10.169 10.242 3.2
-11.948 -11.588 10.352 2.8
-11.553 -7.179 11.302 3
-12.040 -6.141 12.219 3.2
-13.439 -6.539 12.725 3.2
-14.165 -7.280 12.047 2.8
-12.050 -4.869 11.349 3.2
-12.229 -5.381 9.966 3.2
-11.342 -6.628 9.951 3.2
-13.776 -6.106 13.940 3
-15.058 -6.443 14.535 3.2
-14.839 -7.566 15.520 3.2
-15.427 -7.585 16.591 2.8
-13.907 -8.447 15.177 3
-13.559 -9.602 15.985 3.2
-12.765 -9.219 17.237 3.2
-12.012 -8.246 17.232 2.8
-12.748 -10.564 15.129 3.2
-12.905 -12.045 15.461 3.2
-12.084 -12.926 14.529 3.2
-12.219 -12.770 13.283 2.8
-11.296 -13.761 15.046 2.8
-12.932 -10.006 18.298 3
-12.256 -9.777 19.569 3.2
-10.894 -10.453 19.572 3.2
-10.760 -11.637 19.247 2.8
-13.116 -10.293 20.726 3.2
-12.543 -10.067 22.123 3.2
-13.247 -10.959 23.134 3.2
-13.170 -12.418 22.699 3.2
-14.070 -13.322 23.475 3
-9.908 -9.700 20.036 3
-8.526 -10.130 20.071 3.2
-7.935 -10.174 21.487 3.2
-8.172 -9.271 22.292 2.8
-7.711 -9.179 19.162 3.2
-6.312 -8.998 19.678 3.2
-7.708 -9.701 17.728 3.2
-7.139 -11.205 21.771 3
-6.503 -11.361 23.084 3.2
-5.104 -11.990 22.966 3.2
-4.928 -13.035 22.336 2.8
-7.404 -12.188 24.061 3.2
-8.535 -11.398 24.454 2.8
-6.638 -12.615 25.316 3.2
-4.121 -11.313 23.555 3
-2.722 -11.742 23.548 3.2
-2.297 -12.132 24.943 3.2
-2.673 -11.463 25.892 2.8
-1.820 -10.587 23.103 3.2
-1.739 -10.371 21.618 3.2
-1.338 -8.682 21.269 3.25
-2.527 -8.375 20.020 3.2
-1.443 -13.141 25.056 3
-0.966 -13.587 26.356 3.2
0.542 -13.354 26.476 3.2
1.258 -13.343 25.475 2.8
-1.296 -15.060 26.571 3.2
-2.660 -15.289 26.183 2.8
-1.128 -15.434 28.037 3.2
1.005 -13.170 27.710 3
2.397 -12.896 28.027 3.2
2.750 -13.557 29.360 3.2
2.357 -13.071 30.408 2.8
2.584 -11.375 28.115 3.2
4.176 -10.780 28.784 3.25
3.489 -14.659 29.321 3
3.869 -15.379 30.542 3.2
5.230 -15.010 31.143 3.2
6.250 -15.083 30.469 2.8
3.849 -16.884 30.285 3.2
2.682 -17.262 29.565 2.8
5.247 -14.651 32.420 3
6.484 -14.304 33.092 3.2
7.025 -15.532 33.812 3.2
6.309 -16.178 34.574 2.8
6.240 -13.182 34.077 3.2
8.296 -15.853 33.576 3
8.944 -17.013 34.210 3.2
9.123 -16.836 35.723 3.2
9.735 -17.681 36.395 2.8
10.310 -17.279 33.570 3.2
11.281 -16.332 33.984 2.8
8.639 -15.712 36.239 3
8.737 -15.394 37.651 3.2
7.713 -14.305 37.888 3.2
7.375 -13.553 36.967 2.8
10.132 -14.851 37.991 3.2
11.163 -15.586 37.340 2.8
7.209 -14.220 39.109 3
6.229 -13.202 39.423 3.2
6.788 -11.832 39.117 3.2
7.975 -11.566 39.340 2.8
5.861 -13.257 40.896 3.2
5.330 -14.523 41.222 2.8
5.937 -10.992 38.544 3
6.273 -9.616 38.219 3.2
5.163 -8.864 38.930 3.2
4.078 -9.410 39.116 2.8
6.205 -9.348 36.697 3.2
7.265 -10.141 35.981 3.2
4.845 -9.714 36.157 3.2
5.440 -7.653 39.389 3
4.420 -6.880 40.079 3.2
3.408 -6.278 39.093 3.2
2.204 -6.473 39.244 2.8
5.066 -5.805 40.964 3.2
5.814 -6.399 42.162 3.2
6.458 -7.446 42.060 2.8
5.724 -5.727 43.309 3
3.902 -5.586 38.068 3
3.065 -4.951 37.046 3.2
3.649 -5.326 35.669 3.2
4.818 -5.713 35.578 2.8
3.062 -3.427 37.221 3.2
2.679 -2.926 38.607 3.2
3.581 -2.995 39.676 3.2
1.440 -2.318 38.837 3.2
3.266 -2.465 40.941 3.2
1.113 -1.779 40.098 3.2
2.031 -1.856 41.149 3.2
1.725 -1.317 42.390 2.8
2.846 -5.212 34.612 3
3.274 -5.555 33.258 3.2
2.938 -4.409 32.322 3.2
1.845 -3.858 32.411 2.8
2.513 -6.778 32.790 3.2
2.922 -7.288 31.430 3.2
4.541 -8.106 31.396 3.25
4.378 -9.391 32.578 3.2
3.870 -4.040 31.440 3
3.638 -2.958 30.481 3.2
3.518 -3.521 29.088 3.2
3.912 -4.649 28.837 2.8
4.754 -1.926 30.514 3.2
4.947 -1.304 31.865 3.2
5.364 -2.078 32.949 3.2
4.684 0.040 32.077 3.2
5.504 -1.540 34.197 3.2
4.824 0.597 33.332 3.2
5.230 -0.200 34.393 3.2
5.322 0.323 35.664 2.8
2.934 -2.753 28.189 3
2.759 -3.202 26.825 3.2
3.114 -2.059 25.897 3.2
2.908 -0.882 26.232 2.8
1.311 -3.645 26.578 3.2
0.913 -4.868 27.342 3.2
0.670 -4.952 28.680 3.2
0.763 -6.194 26.825 3.2
0.389 -6.248 29.036 3
0.440 -7.033 27.916 3.2
0.871 -6.758 25.551 3.2
0.230 -8.398 27.770 3.2
0.661 -8.119 25.405 3.2
0.345 -8.923 26.508 3.2
3.687 -2.395 24.749 3
4.054 -1.386 23.778 3.2
3.598 -1.873 22.432 3.2
3.539 -3.069 22.191 2.8
5.569 -1.196 23.747 3.2
6.171 -0.707 25.044 3.2
6.489 -1.593 26.069 3.2
6.413 0.644 25.249 3.2
7.025 -1.142 27.259 3.2
6.950 1.100 26.440 3.2
7.250 0.208 27.441 3.2
7.740 0.671 28.642 2.8
3.234 -0.952 21.563 3
2.830 -1.331 20.224 3.2
3.805 -0.728 19.201 3.2
4.267 0.414 19.335 2.8
1.377 -0.915 19.943 3.2
1.177 0.149 18.867 3.2
-0.193 0.078 18.201 3.2
-0.760 -1.002 18.024 2.8
-0.730 1.232 17.829 3
4.150 -1.517 18.198 3
5.047 -1.049 17.173 3.2
4.459 -1.353 15.823 3.2
4.069 -2.479 15.551 2.8
6.407 -1.728 17.306 3.2
7.331 -1.493 16.129 3.2
8.771 -1.614 16.517 3.2
9.540 -0.656 16.404 2.8
9.152 -2.789 17.007 3
4.354 -0.328 14.997 3
3.847 -0.473 13.646 3.2
5.099 -0.339 12.790 3.2
5.836 0.643 12.933 2.8
2.885 0.675 13.329 3.2
1.495 0.548 13.944 3.2
0.721 1.861 13.830 3.2
-0.752 1.682 14.181 3.2
-1.452 0.817 13.190 3
5.392 -1.335 11.958 3
6.578 -1.249 11.107 3.2
6.623 0.127 10.427 3.2
5.719 0.487 9.660 2.8
6.613 -2.385 10.070 3.2
5.436 -2.426 9.280 2.8
7.641 0.910 10.800 3
7.826 2.252 10.272 3.2
7.813 3.276 11.400 3.2
7.925 4.490 11.170 2.8
7.699 2.788 12.631 3
7.656 3.676 13.779 3.2
8.471 3.108 14.925 3.2
8.911 1.951 14.866 2.8
6.183 3.858 14.273 3.2
5.639 2.590 14.684 2.8
5.302 4.447 13.165 3.2
8.738 3.951 15.926 3
9.439 3.510 17.129 3.2
8.304 3.072 18.037 3.2
7.196 3.579 17.919 2.8
10.245 4.648 17.772 3.2
9.622 5.902 17.625 2.8
8.535 2.080 18.899 3
7.477 1.617 19.793 3.2
6.728 2.727 20.518 3.2
7.252 3.824 20.723 2.8
8.232 0.722 20.760 3.2
9.230 0.106 19.872 3.2
9.752 1.285 19.090 3.2
5.478 2.431 20.857 3
4.601 3.358 21.558 3.2
4.122 2.599 22.787 3.2
3.973 1.381 22.750 2.8
3.434 3.741 20.626 3.2
2.335 4.646 21.187 3.2
2.826 5.997 21.716 3.2
1.654 6.807 22.321 3.2
2.082 8.015 23.103 3
4.015 3.284 23.911 3
3.539 2.629 25.120 3.2
2.018 2.593 25.048 3.2
1.363 3.624 24.896 2.8
4.026 3.351 26.389 3.2
3.854 2.529 27.681 3.2
4.682 3.083 28.843 3.2
4.353 4.471 29.154 3
4.252 4.949 30.391 3.2
4.462 4.145 31.432 3
3.896 6.218 30.598 3
1.475 1.387 25.062 3
0.041 1.206 24.996 3.2
-0.537 1.123 26.401 3.2
-1.205 2.040 26.858 2.8
-0.301 -0.056 24.209 3.2
-1.340 0.158 23.163 3.2
-2.338 -0.698 22.835 3.2
-1.434 1.261 22.240 3.2
-3.039 -0.215 21.760 3
-2.506 0.985 21.372 3.2
-0.713 2.452 22.061 3.2
-2.875 1.844 20.341 3.2
-1.083 3.310 21.035 3.2
-2.154 2.999 20.187 3.2
-0.274 0.031 27.095 3
-0.795 -0.122 28.438 3.2
0.378 -0.016 29.394 3.2
1.502 -0.388 29.049 2.8
-1.491 -1.494 28.605 3.2
-2.565 -1.650 27.541 3.2
-2.130 -1.620 29.977 3.2
-3.014 -3.060 27.385 3.2
0.136 0.564 30.559 3
1.166 0.680 31.557 3.2
0.546 0.286 32.874 3.2
-0.666 0.098 32.949 2.8
1.790 2.080 31.563 3.2
0.931 3.219 32.029 3.2
0.161 3.948 31.131 3.2
0.940 3.615 33.357 3.2
-0.578 5.044 31.550 3.2
0.209 4.703 33.782 3.2
-0.550 5.415 32.877 3.2
-1.285 6.495 33.307 2.8
1.386 0.056 33.876 3
0.937 -0.362 35.195 3.2
-0.147 -1.423 35.137 3.2
-1.120 -1.381 35.880 2.8
0.504 0.838 36.027 3.2
1.665 1.720 36.398 3.2
2.808 1.395 36.031 2.8
1.452 2.749 37.048 2.8
0.037 -2.352 34.208 3
-0.848 -3.488 33.980 3.2
-2.136 -3.198 33.245 3.2
-2.387 -3.790 32.191 2.8
-1.226 -4.223 35.272 3.2
-0.104 -4.291 36.158 2.8
-1.661 -5.617 34.953 3.2
-2.940 -2.277 33.771 3
-4.245 -1.987 33.177 3.2
-4.525 -0.563 32.733 3.2
-5.523 -0.304 32.053 2.8
-5.341 -2.447 34.135 3.2
-5.005 -2.118 35.467 2.8
-3.658 0.360 33.122 3
-3.835 1.754 32.751 3.2
-3.502 2.000 31.275 3.2
-2.432 1.620 30.820 2.8
-2.973 2.629 33.662 3.2
-3.753 3.258 34.807 3.2
-2.937 3.272 36.093 3.2
-3.428 2.198 37.077 3.2
-3.443 0.803 36.501 3
-4.442 2.556 30.511 3
-4.179 2.841 29.106 3.2
-3.295 4.059 29.078 3.2
-3.300 4.850 30.012 2.8
-5.449 3.170 28.318 3.2
-6.598 2.179 28.109 3.2
-7.395 2.615 26.889 3.2
-6.089 0.775 27.913 3.2
-2.530 4.206 28.012 3
-1.650 5.347 27.877 3.2
-2.299 6.381 26.960 3.2
-3.245 6.082 26.225 2.8
-0.302 4.910 27.332 3.2
-1.757 7.590 26.998 3
-2.239 8.734 26.226 3.2
-2.480 8.573 24.713 3.2
-1.681 9.042 23.892 2.8
-1.280 9.894 26.474 3.2
0.050 9.403 26.585 2.8
-3.600 7.957 24.347 3
-3.922 7.775 22.938 3.2
-4.472 6.402 22.588 3.2
-4.860 6.153 21.443 2.8
-4.498 5.498 23.556 3
-5.014 4.159 23.308 3.2
-6.557 4.146 23.304 3.2
-7.201 4.537 24.292 2.8
-4.498 3.169 24.377 3.2
-4.714 1.730 23.935 3.2
-3.039 3.434 24.669 3.2
-7.175 3.767 22.168 3
-8.638 3.739 22.153 3.2
-9.136 2.763 23.220 3.2
-8.564 1.691 23.428 2.8
-8.963 3.269 20.732 3.2
-7.763 2.488 20.340 3.2
-6.645 3.364 20.858 3.2
-10.234 3.140 23.860 3
-10.823 2.363 24.934 3.2
-11.097 0.880 24.632 3.2
-11.356 0.106 25.559 2.8
-12.081 3.091 25.487 3.2
-12.534 2.462 26.785 3.2
-11.769 4.576 25.709 3.2
-10.987 0.455 23.370 3
-11.229 -0.960 23.056 3.2
-10.165 -1.912 23.622 3.2
-10.389 -3.117 23.702 2.8
-11.419 -1.189 21.549 3.2
-10.287 -0.700 20.652 3.2
-10.460 -1.247 19.225 3.2
-9.613 -0.546 18.270 3
-9.660 0.762 18.072 3.2
-10.535 1.506 18.720 3
-8.853 1.334 17.201 3
-9.026 -1.359 24.029 3
-7.929 -2.135 24.606 3.2
-8.030 -2.153 26.116 3.2
-8.379 -1.153 26.728 2.8
-6.566 -1.505 24.264 3.2
-6.179 -1.617 22.831 3.2
-6.548 -0.634 21.923 3.2
-5.442 -2.698 22.392 3.2
-6.188 -0.725 20.607 3.2
-5.077 -2.798 21.074 3.2
-5.451 -1.810 20.180 3.2
-7.612 -3.255 26.717 3
-7.620 -3.395 28.163 3.2
-6.553 -4.422 28.533 3.2
-6.345 -5.387 27.814 2.8
-9.000 -3.829 28.658 3.2
-9.505 -4.914 27.905 2.8
-5.814 -4.172 29.599 3
-4.790 -5.113 29.996 3.2
-5.110 -5.657 31.366 3.2
-5.673 -4.948 32.203 2.8
-4.715 -6.895 31.619 3
-4.989 -7.508 32.896 3.2
-3.881 -8.476 33.246 3.2
-2.913 -8.605 32.502 2.8
-6.307 -8.259 32.806 3.2
-6.158 -9.394 31.974 2.8
-4.021 -9.142 34.385 3
-3.030 -10.110 34.812 3.2
-2.642 -10.058 36.279 3.2
-2.963 -9.102 37.000 2.8
-1.899 -11.076 36.703 3
-1.430 -11.201 38.079 3.2
-0.316 -12.247 38.168 3.2
-0.473 -13.370 37.679 2.8
-2.596 -11.619 38.991 3.2
-3.261 -12.796 38.508 2.8
0.811 -11.859 38.759 3
1.932 -12.767 38.933 3.2
2.616 -13.292 37.676 3.2

View File

@ -0,0 +1,506 @@
15.566 -9.825 34.260 1.6
15.797 -11.159 34.929 1.8
14.795 -12.222 34.440 1.8
15.154 -13.300 33.969 1.4
15.673 -11.028 36.462 1.8
16.000 -9.000 36.000 0.8
16.056 -9.635 36.972 1.8
15.349 -8.650 36.620 1.4
17.055 -9.528 37.725 1.4
13.525 -11.878 34.555 1.6
12.444 -12.754 34.172 1.8
12.391 -12.861 32.655 1.8
12.000 -12.000 32.000 0.8
12.660 -11.876 31.954 1.4
11.114 -12.178 34.702 1.8
11.138 -12.091 36.234 1.8
9.935 -13.011 34.222 1.8
11.975 -10.953 36.820 1.8
12.107 -14.065 32.164 1.6
12.107 -14.061 32.164 0.01
12.102 -14.061 32.164 0.01
12.104 -14.062 32.161 0.01
11.975 -14.316 30.735 1.8
10.483 -14.174 30.425 1.8
9.645 -14.759 31.118 1.4
12.442 -15.742 30.368 1.8
12.270 -15.996 28.882 1.8
13.886 -15.938 30.770 1.8
10.142 -13.379 29.417 1.6
8.742 -13.179 29.067 1.8
8.367 -13.816 27.742 1.8
8.629 -13.257 26.676 1.4
8.397 -11.683 29.045 1.8
8.593 -10.899 30.351 1.8
7.913 -9.560 30.242 1.8
8.022 -11.674 31.518 1.8
7.764 -14.993 27.805 1.6
7.351 -15.692 26.605 1.8
5.931 -15.254 26.168 1.8
4.961 -15.419 26.903 1.4
7.470 -17.217 26.812 1.8
7.487 -17.504 28.210 1.4
8.774 -17.743 26.238 1.8
5.840 -14.633 24.993 1.6
4.576 -14.148 24.442 1.8
3.888 -15.098 23.460 1.8
4.502 -15.554 22.497 1.4
4.790 -12.822 23.716 1.8
5.037 -11.629 24.593 1.8
4.433 -10.378 24.002 1.8
4.980 -9.279 24.123 1.4
3.283 -10.536 23.357 1.6
2.590 -15.316 23.650 1.6
1.811 -16.178 22.764 1.8
0.476 -15.526 22.334 1.8
-0.220 -14.888 23.139 1.4
1.560 -17.546 23.418 1.8
0.884 -17.436 24.663 1.4
0.125 -15.639 21.037 1.6
0.925 -16.338 20.015 1.8
1.964 -15.392 19.371 1.8
1.984 -14.194 19.682 1.4
-0.148 -16.790 19.022 1.8
-1.084 -15.609 19.006 1.8
-1.171 -15.193 20.483 1.8
2.838 -15.936 18.516 1.6
3.865 -15.141 17.832 1.8
3.252 -14.343 16.688 1.8
3.482 -13.142 16.573 1.4
4.963 -16.023 17.319 1.8
2.544 -15.019 15.792 1.6
1.862 -14.321 14.712 1.8
0.406 -14.593 15.038 1.8
0.090 -15.582 15.720 1.4
2.163 -14.890 13.313 1.8
3.665 -15.067 13.101 1.8
1.637 -13.929 12.251 1.8
4.423 -13.762 13.010 1.8
-0.481 -13.744 14.539 1.6
-1.904 -13.885 14.805 1.8
-2.680 -13.021 13.818 1.8
-2.194 -11.957 13.395 1.4
-2.164 -13.408 16.231 1.8
-3.596 -13.374 16.677 1.8
-3.602 -12.970 18.427 1.85
-3.000 -12.000 18.000 0.05
-3.650 -11.183 18.362 1.8
-3.880 -13.472 13.459 1.6
-4.740 -12.738 12.530 1.8
-6.187 -12.642 13.035 1.8
-6.637 -13.459 13.847 1.4
-4.688 -13.377 11.137 1.8
-4.897 -14.779 11.216 1.4
-6.903 -11.628 12.568 1.6
-8.283 -11.409 12.964 1.8
-8.873 -10.368 12.035 1.8
-8.157 -9.506 11.532 1.4
-8.347 -10.914 14.407 1.8
-10.172 -10.452 11.792 1.6
-10.836 -9.499 10.915 1.8
-11.327 -8.400 11.828 1.8
-11.441 -8.624 13.033 1.4
-12.030 -10.169 10.242 1.8
-11.948 -11.588 10.352 1.4
-11.553 -7.179 11.302 1.6
-12.040 -6.141 12.219 1.8
-13.439 -6.539 12.725 1.8
-14.165 -7.280 12.047 1.4
-12.050 -4.869 11.349 1.8
-12.229 -5.381 9.966 1.8
-11.342 -6.628 9.951 1.8
-13.776 -6.106 13.940 1.6
-15.058 -6.443 14.535 1.8
-14.839 -7.566 15.520 1.8
-15.427 -7.585 16.591 1.4
-13.907 -8.447 15.177 1.6
-13.559 -9.602 15.985 1.8
-12.765 -9.219 17.237 1.8
-12.012 -8.246 17.232 1.4
-12.748 -10.564 15.129 1.8
-12.905 -12.045 15.461 1.8
-12.084 -12.926 14.529 1.8
-12.219 -12.770 13.283 1.4
-11.296 -13.761 15.046 1.4
-12.932 -10.006 18.298 1.6
-12.256 -9.777 19.569 1.8
-10.894 -10.453 19.572 1.8
-10.760 -11.637 19.247 1.4
-13.116 -10.293 20.726 1.8
-12.543 -10.067 22.123 1.8
-13.247 -10.959 23.134 1.8
-13.170 -12.418 22.699 1.8
-14.070 -13.322 23.475 1.6
-9.908 -9.700 20.036 1.6
-8.526 -10.130 20.071 1.8
-7.935 -10.174 21.487 1.8
-8.172 -9.271 22.292 1.4
-7.711 -9.179 19.162 1.8
-6.312 -8.998 19.678 1.8
-7.708 -9.701 17.728 1.8
-7.139 -11.205 21.771 1.6
-6.503 -11.361 23.084 1.8
-5.104 -11.990 22.966 1.8
-4.928 -13.035 22.336 1.4
-7.404 -12.188 24.061 1.8
-8.535 -11.398 24.454 1.4
-6.638 -12.615 25.316 1.8
-4.121 -11.313 23.555 1.6
-2.722 -11.742 23.548 1.8
-2.297 -12.132 24.943 1.8
-2.673 -11.463 25.892 1.4
-1.820 -10.587 23.103 1.8
-1.739 -10.371 21.618 1.8
-1.338 -8.682 21.269 1.85
-2.527 -8.375 20.020 1.8
-1.443 -13.141 25.056 1.6
-0.966 -13.587 26.356 1.8
0.542 -13.354 26.476 1.8
1.258 -13.343 25.475 1.4
-1.296 -15.060 26.571 1.8
-2.660 -15.289 26.183 1.4
-1.128 -15.434 28.037 1.8
1.005 -13.170 27.710 1.6
2.397 -12.896 28.027 1.8
2.750 -13.557 29.360 1.8
2.357 -13.071 30.408 1.4
2.584 -11.375 28.115 1.8
4.176 -10.780 28.784 1.85
3.489 -14.659 29.321 1.6
3.869 -15.379 30.542 1.8
5.230 -15.010 31.143 1.8
6.250 -15.083 30.469 1.4
3.849 -16.884 30.285 1.8
2.682 -17.262 29.565 1.4
5.247 -14.651 32.420 1.6
6.484 -14.304 33.092 1.8
7.025 -15.532 33.812 1.8
6.309 -16.178 34.574 1.4
6.240 -13.182 34.077 1.8
8.296 -15.853 33.576 1.6
8.944 -17.013 34.210 1.8
9.123 -16.836 35.723 1.8
9.735 -17.681 36.395 1.4
10.310 -17.279 33.570 1.8
11.281 -16.332 33.984 1.4
8.639 -15.712 36.239 1.6
8.737 -15.394 37.651 1.8
7.713 -14.305 37.888 1.8
7.375 -13.553 36.967 1.4
10.132 -14.851 37.991 1.8
11.163 -15.586 37.340 1.4
7.209 -14.220 39.109 1.6
6.229 -13.202 39.423 1.8
6.788 -11.832 39.117 1.8
7.975 -11.566 39.340 1.4
5.861 -13.257 40.896 1.8
5.330 -14.523 41.222 1.4
5.937 -10.992 38.544 1.6
6.273 -9.616 38.219 1.8
5.163 -8.864 38.930 1.8
4.078 -9.410 39.116 1.4
6.205 -9.348 36.697 1.8
7.265 -10.141 35.981 1.8
4.845 -9.714 36.157 1.8
5.440 -7.653 39.389 1.6
4.420 -6.880 40.079 1.8
3.408 -6.278 39.093 1.8
2.204 -6.473 39.244 1.4
5.066 -5.805 40.964 1.8
5.814 -6.399 42.162 1.8
6.458 -7.446 42.060 1.4
5.724 -5.727 43.309 1.6
3.902 -5.586 38.068 1.6
3.065 -4.951 37.046 1.8
3.649 -5.326 35.669 1.8
4.818 -5.713 35.578 1.4
3.062 -3.427 37.221 1.8
2.679 -2.926 38.607 1.8
3.581 -2.995 39.676 1.8
1.440 -2.318 38.837 1.8
3.266 -2.465 40.941 1.8
1.113 -1.779 40.098 1.8
2.031 -1.856 41.149 1.8
1.725 -1.317 42.390 1.4
2.846 -5.212 34.612 1.6
3.274 -5.555 33.258 1.8
2.938 -4.409 32.322 1.8
1.845 -3.858 32.411 1.4
2.513 -6.778 32.790 1.8
2.922 -7.288 31.430 1.8
4.541 -8.106 31.396 1.85
4.378 -9.391 32.578 1.8
3.870 -4.040 31.440 1.6
3.638 -2.958 30.481 1.8
3.518 -3.521 29.088 1.8
3.912 -4.649 28.837 1.4
4.754 -1.926 30.514 1.8
4.947 -1.304 31.865 1.8
5.364 -2.078 32.949 1.8
4.684 0.040 32.077 1.8
5.504 -1.540 34.197 1.8
4.824 0.597 33.332 1.8
5.230 -0.200 34.393 1.8
5.322 0.323 35.664 1.4
2.934 -2.753 28.189 1.6
2.759 -3.202 26.825 1.8
3.114 -2.059 25.897 1.8
2.908 -0.882 26.232 1.4
1.311 -3.645 26.578 1.8
0.913 -4.868 27.342 1.8
0.670 -4.952 28.680 1.8
0.763 -6.194 26.825 1.8
0.389 -6.248 29.036 1.6
0.440 -7.033 27.916 1.8
0.871 -6.758 25.551 1.8
0.230 -8.398 27.770 1.8
0.661 -8.119 25.405 1.8
0.345 -8.923 26.508 1.8
3.687 -2.395 24.749 1.6
4.054 -1.386 23.778 1.8
3.598 -1.873 22.432 1.8
3.539 -3.069 22.191 1.4
5.569 -1.196 23.747 1.8
6.171 -0.707 25.044 1.8
6.489 -1.593 26.069 1.8
6.413 0.644 25.249 1.8
7.025 -1.142 27.259 1.8
6.950 1.100 26.440 1.8
7.250 0.208 27.441 1.8
7.740 0.671 28.642 1.4
3.234 -0.952 21.563 1.6
2.830 -1.331 20.224 1.8
3.805 -0.728 19.201 1.8
4.267 0.414 19.335 1.4
1.377 -0.915 19.943 1.8
1.177 0.149 18.867 1.8
-0.193 0.078 18.201 1.8
-0.760 -1.002 18.024 1.4
-0.730 1.232 17.829 1.6
4.150 -1.517 18.198 1.6
5.047 -1.049 17.173 1.8
4.459 -1.353 15.823 1.8
4.069 -2.479 15.551 1.4
6.407 -1.728 17.306 1.8
7.331 -1.493 16.129 1.8
8.771 -1.614 16.517 1.8
9.540 -0.656 16.404 1.4
9.152 -2.789 17.007 1.6
4.354 -0.328 14.997 1.6
3.847 -0.473 13.646 1.8
5.099 -0.339 12.790 1.8
5.836 0.643 12.933 1.4
2.885 0.675 13.329 1.8
1.495 0.548 13.944 1.8
0.721 1.861 13.830 1.8
-0.752 1.682 14.181 1.8
-1.452 0.817 13.190 1.6
5.392 -1.335 11.958 1.6
6.578 -1.249 11.107 1.8
6.623 0.127 10.427 1.8
5.719 0.487 9.660 1.4
6.613 -2.385 10.070 1.8
5.436 -2.426 9.280 1.4
7.641 0.910 10.800 1.6
7.826 2.252 10.272 1.8
7.813 3.276 11.400 1.8
7.925 4.490 11.170 1.4
7.699 2.788 12.631 1.6
7.656 3.676 13.779 1.8
8.471 3.108 14.925 1.8
8.911 1.951 14.866 1.4
6.183 3.858 14.273 1.8
5.639 2.590 14.684 1.4
5.302 4.447 13.165 1.8
8.738 3.951 15.926 1.6
9.439 3.510 17.129 1.8
8.304 3.072 18.037 1.8
7.196 3.579 17.919 1.4
10.245 4.648 17.772 1.8
9.622 5.902 17.625 1.4
8.535 2.080 18.899 1.6
7.477 1.617 19.793 1.8
6.728 2.727 20.518 1.8
7.252 3.824 20.723 1.4
8.232 0.722 20.760 1.8
9.230 0.106 19.872 1.8
9.752 1.285 19.090 1.8
5.478 2.431 20.857 1.6
4.601 3.358 21.558 1.8
4.122 2.599 22.787 1.8
3.973 1.381 22.750 1.4
3.434 3.741 20.626 1.8
2.335 4.646 21.187 1.8
2.826 5.997 21.716 1.8
1.654 6.807 22.321 1.8
2.082 8.015 23.103 1.6
4.015 3.284 23.911 1.6
3.539 2.629 25.120 1.8
2.018 2.593 25.048 1.8
1.363 3.624 24.896 1.4
4.026 3.351 26.389 1.8
3.854 2.529 27.681 1.8
4.682 3.083 28.843 1.8
4.353 4.471 29.154 1.6
4.252 4.949 30.391 1.8
4.462 4.145 31.432 1.6
3.896 6.218 30.598 1.6
1.475 1.387 25.062 1.6
0.041 1.206 24.996 1.8
-0.537 1.123 26.401 1.8
-1.205 2.040 26.858 1.4
-0.301 -0.056 24.209 1.8
-1.340 0.158 23.163 1.8
-2.338 -0.698 22.835 1.8
-1.434 1.261 22.240 1.8
-3.039 -0.215 21.760 1.6
-2.506 0.985 21.372 1.8
-0.713 2.452 22.061 1.8
-2.875 1.844 20.341 1.8
-1.083 3.310 21.035 1.8
-2.154 2.999 20.187 1.8
-0.274 0.031 27.095 1.6
-0.795 -0.122 28.438 1.8
0.378 -0.016 29.394 1.8
1.502 -0.388 29.049 1.4
-1.491 -1.494 28.605 1.8
-2.565 -1.650 27.541 1.8
-2.130 -1.620 29.977 1.8
-3.014 -3.060 27.385 1.8
0.136 0.564 30.559 1.6
1.166 0.680 31.557 1.8
0.546 0.286 32.874 1.8
-0.666 0.098 32.949 1.4
1.790 2.080 31.563 1.8
0.931 3.219 32.029 1.8
0.161 3.948 31.131 1.8
0.940 3.615 33.357 1.8
-0.578 5.044 31.550 1.8
0.209 4.703 33.782 1.8
-0.550 5.415 32.877 1.8
-1.285 6.495 33.307 1.4
1.386 0.056 33.876 1.6
0.937 -0.362 35.195 1.8
-0.147 -1.423 35.137 1.8
-1.120 -1.381 35.880 1.4
0.504 0.838 36.027 1.8
1.665 1.720 36.398 1.8
2.808 1.395 36.031 1.4
1.452 2.749 37.048 1.4
0.037 -2.352 34.208 1.6
-0.848 -3.488 33.980 1.8
-2.136 -3.198 33.245 1.8
-2.387 -3.790 32.191 1.4
-1.226 -4.223 35.272 1.8
-0.104 -4.291 36.158 1.4
-1.661 -5.617 34.953 1.8
-2.940 -2.277 33.771 1.6
-4.245 -1.987 33.177 1.8
-4.525 -0.563 32.733 1.8
-5.523 -0.304 32.053 1.4
-5.341 -2.447 34.135 1.8
-5.005 -2.118 35.467 1.4
-3.658 0.360 33.122 1.6
-3.835 1.754 32.751 1.8
-3.502 2.000 31.275 1.8
-2.432 1.620 30.820 1.4
-2.973 2.629 33.662 1.8
-3.753 3.258 34.807 1.8
-2.937 3.272 36.093 1.8
-3.428 2.198 37.077 1.8
-3.443 0.803 36.501 1.6
-4.442 2.556 30.511 1.6
-4.179 2.841 29.106 1.8
-3.295 4.059 29.078 1.8
-3.300 4.850 30.012 1.4
-5.449 3.170 28.318 1.8
-6.598 2.179 28.109 1.8
-7.395 2.615 26.889 1.8
-6.089 0.775 27.913 1.8
-2.530 4.206 28.012 1.6
-1.650 5.347 27.877 1.8
-2.299 6.381 26.960 1.8
-3.245 6.082 26.225 1.4
-0.302 4.910 27.332 1.8
-1.757 7.590 26.998 1.6
-2.239 8.734 26.226 1.8
-2.480 8.573 24.713 1.8
-1.681 9.042 23.892 1.4
-1.280 9.894 26.474 1.8
0.050 9.403 26.585 1.4
-3.600 7.957 24.347 1.6
-3.922 7.775 22.938 1.8
-4.472 6.402 22.588 1.8
-4.860 6.153 21.443 1.4
-4.498 5.498 23.556 1.6
-5.014 4.159 23.308 1.8
-6.557 4.146 23.304 1.8
-7.201 4.537 24.292 1.4
-4.498 3.169 24.377 1.8
-4.714 1.730 23.935 1.8
-3.039 3.434 24.669 1.8
-7.175 3.767 22.168 1.6
-8.638 3.739 22.153 1.8
-9.136 2.763 23.220 1.8
-8.564 1.691 23.428 1.4
-8.963 3.269 20.732 1.8
-7.763 2.488 20.340 1.8
-6.645 3.364 20.858 1.8
-10.234 3.140 23.860 1.6
-10.823 2.363 24.934 1.8
-11.097 0.880 24.632 1.8
-11.356 0.106 25.559 1.4
-12.081 3.091 25.487 1.8
-12.534 2.462 26.785 1.8
-11.769 4.576 25.709 1.8
-10.987 0.455 23.370 1.6
-11.229 -0.960 23.056 1.8
-10.165 -1.912 23.622 1.8
-10.389 -3.117 23.702 1.4
-11.419 -1.189 21.549 1.8
-10.287 -0.700 20.652 1.8
-10.460 -1.247 19.225 1.8
-9.613 -0.546 18.270 1.6
-9.660 0.762 18.072 1.8
-10.535 1.506 18.720 1.6
-8.853 1.334 17.201 1.6
-9.026 -1.359 24.029 1.6
-7.929 -2.135 24.606 1.8
-8.030 -2.153 26.116 1.8
-8.379 -1.153 26.728 1.4
-6.566 -1.505 24.264 1.8
-6.179 -1.617 22.831 1.8
-6.548 -0.634 21.923 1.8
-5.442 -2.698 22.392 1.8
-6.188 -0.725 20.607 1.8
-5.077 -2.798 21.074 1.8
-5.451 -1.810 20.180 1.8
-7.612 -3.255 26.717 1.6
-7.620 -3.395 28.163 1.8
-6.553 -4.422 28.533 1.8
-6.345 -5.387 27.814 1.4
-9.000 -3.829 28.658 1.8
-9.505 -4.914 27.905 1.4
-5.814 -4.172 29.599 1.6
-4.790 -5.113 29.996 1.8
-5.110 -5.657 31.366 1.8
-5.673 -4.948 32.203 1.4
-4.715 -6.895 31.619 1.6
-4.989 -7.508 32.896 1.8
-3.881 -8.476 33.246 1.8
-2.913 -8.605 32.502 1.4
-6.307 -8.259 32.806 1.8
-6.158 -9.394 31.974 1.4
-4.021 -9.142 34.385 1.6
-3.030 -10.110 34.812 1.8
-2.642 -10.058 36.279 1.8
-2.963 -9.102 37.000 1.4
-1.899 -11.076 36.703 1.6
-1.430 -11.201 38.079 1.8
-0.316 -12.247 38.168 1.8
-0.473 -13.370 37.679 1.4
-2.596 -11.619 38.991 1.8
-3.261 -12.796 38.508 1.4
0.811 -11.859 38.759 1.6
1.932 -12.767 38.933 1.8
2.616 -13.292 37.676 1.8

View File

@ -0,0 +1 @@
data/small-exp.in data/small.in

View File

@ -0,0 +1,307 @@
#include <CGAL/Fixed_alpha_shape_3.h>
#include <CGAL/Fixed_alpha_shape_cell_base_3.h>
#include <CGAL/Fixed_alpha_shape_vertex_base_3.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#ifndef CGAL_NO_DEPRECATED_CODE
# include <CGAL/Weighted_alpha_shape_euclidean_traits_3.h>
#endif
#include <CGAL/Regular_triangulation_3.h>
#include <CGAL/Delaunay_triangulation_3.h>
#include <iostream>
#include <fstream>
#include <CGAL/Timer.h>
#include <CGAL/Alpha_shape_3.h>
#include <CGAL/Alpha_shape_cell_base_3.h>
#include <CGAL/Alpha_shape_vertex_base_3.h>
#include "copy_tds.h"
#include "Filtered_weighted_alpha_shape_euclidean_traits_3.h"
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Regular_triangulation_euclidean_traits_3<Kernel> WFixed_Gt;
typedef WFixed_Gt Gt;
//typedef CGAL::Filtered_weighted_alpha_shape_euclidean_traits_3<Kernel,true> Gt;
typedef CGAL::Weighted_point<Kernel::Point_3,Kernel::FT> Weighted_point;
typedef CGAL::Fixed_alpha_shape_vertex_base_3<WFixed_Gt> WFixed_Vb;
typedef CGAL::Fixed_alpha_shape_cell_base_3<WFixed_Gt> WFixed_Cb;
typedef CGAL::Triangulation_data_structure_3<WFixed_Vb,WFixed_Cb> WFixed_TDS;
typedef CGAL::Regular_triangulation_3<WFixed_Gt,WFixed_TDS> WFixed_DT;
typedef CGAL::Fixed_alpha_shape_3< WFixed_DT > WFixed_AS;
typedef CGAL::Alpha_shape_vertex_base_3<Gt> WVb;
typedef CGAL::Alpha_shape_cell_base_3<Gt> WCb;
typedef CGAL::Triangulation_data_structure_3<WVb,WCb> WTDS;
typedef CGAL::Regular_triangulation_3<Gt,WTDS> WDT;
typedef CGAL::Alpha_shape_3< WDT > WAS;
//Unweighted stuff
typedef CGAL::Fixed_alpha_shape_vertex_base_3<Kernel> Fixed_Vb;
typedef CGAL::Fixed_alpha_shape_cell_base_3<Kernel> Fixed_Cb;
typedef CGAL::Triangulation_data_structure_3<Fixed_Vb,Fixed_Cb> Fixed_TDS;
typedef CGAL::Delaunay_triangulation_3<Kernel,Fixed_TDS> Fixed_DT;
typedef CGAL::Fixed_alpha_shape_3<Fixed_DT> Fixed_AS;
typedef CGAL::Alpha_shape_vertex_base_3<Kernel> Vb;
typedef CGAL::Alpha_shape_cell_base_3<Kernel> Fb;
typedef CGAL::Triangulation_data_structure_3<Vb,Fb> TDS;
typedef CGAL::Delaunay_triangulation_3<Kernel,TDS> DT;
typedef CGAL::Alpha_shape_3<DT> AS;
template <class Object>
void fill_wp_lists(const char* file_path,std::list<Object>& Ls,double rw=0){
double x,y,z,r;
std::ifstream input(file_path);
while(input){
input >> x;
if (!input) break;
input >> y >> z >> r;
Ls.push_back(Object(Kernel::Point_3(x,y,z),(r+rw)*(r+rw)));
}
}
template <class Iterator,class Alpha_shape_3>
void print_simplices_classif(Iterator begin,Iterator end, const Alpha_shape_3& As){
unsigned count[4]={0,0,0,0};
for (Iterator it=begin;it!=end;++it){
typename Alpha_shape_3::Classification_type type=As.classify(it);
switch (type){
case Alpha_shape_3::REGULAR:
++count[0];
break;
case Alpha_shape_3::INTERIOR:
++count[1];
break;
case Alpha_shape_3::SINGULAR:
++count[2];
break;
case Alpha_shape_3::EXTERIOR:
++count[3];
break;
default:
std::cout << type << std::endl;
assert(false);
}
}
std::cout << "R I S E : "<< count[0] << " "<< count[1] << " "<< count[2] << " "<< count[3] << std::endl;
}
template <class Iterator,class Alpha_shape_3>
void print_simplices_classif_fe(Iterator begin,Iterator end, const Alpha_shape_3& As){
unsigned count[4]={0,0,0,0};
for (Iterator it=begin;it!=end;++it){
typename Alpha_shape_3::Classification_type type=As.classify(*it);
switch (type){
case Alpha_shape_3::REGULAR:
++count[0];
break;
case Alpha_shape_3::INTERIOR:
++count[1];
break;
case Alpha_shape_3::SINGULAR:
++count[2];
break;
case Alpha_shape_3::EXTERIOR:
++count[3];
break;
default:
std::cout << type << std::endl;
assert(false);
}
}
std::cout << "R I S E : "<< count[0] << " "<< count[1] << " "<< count[2] << " "<< count[3] << std::endl;
}
template <class AS1,class AS2>
void print_comparison(const AS1& as1, const AS2& as2){
std::cout << "Cells\n";
print_simplices_classif(as1.finite_cells_begin(),as1.finite_cells_end(),as1);
print_simplices_classif(as2.finite_cells_begin(),as2.finite_cells_end(),as2);
std::cout << "Facets\n";
print_simplices_classif_fe(as1.finite_facets_begin(),as1.finite_facets_end(),as1);
print_simplices_classif_fe(as2.finite_facets_begin(),as2.finite_facets_end(),as2);
std::cout << "Edges\n";
print_simplices_classif_fe(as1.finite_edges_begin(),as1.finite_edges_end(),as1);
print_simplices_classif_fe(as2.finite_edges_begin(),as2.finite_edges_end(),as2);
std::cout << "Vertices\n";
print_simplices_classif(as1.finite_vertices_begin(),as1.finite_vertices_end(),as1);
print_simplices_classif(as2.finite_vertices_begin(),as2.finite_vertices_end(),as2);
}
template <class Iterator1,class Iterator2,class AS1,class AS2>
void compare_classif(Iterator1 begin1, Iterator1 end1,const AS1& as1,Iterator2 it2, const AS2& as2,std::string sname,bool debug){
unsigned nb=0;
for (Iterator1 it1=begin1;it1!=end1;++it1){
++nb;
if ( static_cast<int>(as1.classify(it1)) != static_cast<int>(as2.classify(it2))){
std::cerr << nb << " Pb in " << sname << "\n";
print_comparison(as1,as2);
exit(EXIT_FAILURE);
}
++it2;
}
if (debug)
std::cout << sname << ": " << nb << " identical\n";
}
template <class Iterator1,class Iterator2,class AS1,class AS2>
void compare_facets_classif(Iterator1 begin1, Iterator1 end1,const AS1& as1,Iterator2 it2, const AS2& as2,std::string sname,bool debug){
unsigned nb=0;
for (Iterator1 it1=begin1;it1!=end1;++it1){
for (int i=0; i<4;++i){
typename AS1::Facet f1(it1,i);
typename AS2::Facet f2(it2,i);
if ( static_cast<int>(as1.classify(f1)) != static_cast<int>(as2.classify(f2))){
std::cerr << " Pb in " << sname << "\n";
print_comparison(as1,as2);
exit(EXIT_FAILURE);
}
}
++it2;
}
if (debug)
std::cout << sname << ": " << nb << " identical\n";
}
template <class Iterator1,class Iterator2,class AS1,class AS2>
void compare_edges_classif(Iterator1 begin1, Iterator1 end1,const AS1& as1,Iterator2 it2, const AS2& as2,std::string sname,bool debug){
unsigned nb=0;
for (Iterator1 it1=begin1;it1!=end1;++it1){
for (int i=0; i<4;++i){
for (int j=i+1;j<4;++j){
typename AS1::Edge e1(it1,i,j);
typename AS2::Edge e2(it2,i,j);
if ( static_cast<int>(as1.classify(e1)) != static_cast<int>(as2.classify(e2))){
std::cerr << " Pb in " << sname << "\n";
print_comparison(as1,as2);
exit(EXIT_FAILURE);
}
}
}
++it2;
}
if (debug)
std::cout << sname << ": " << nb << " identical\n";
}
template <class AS1,class AS2>
void compare_all(const AS1& as1, const AS2& as2,bool debug=false)
{
compare_classif(as1.finite_cells_begin(),as1.finite_cells_end(),as1,as2.finite_cells_begin(),as2,"Cells",debug);
compare_facets_classif(as1.finite_cells_begin(),as1.finite_cells_end(),as1,as2.finite_cells_begin(),as2,"Facets",debug);
compare_edges_classif(as1.finite_cells_begin(),as1.finite_cells_end(),as1,as2.finite_cells_begin(),as2,"Edges",debug);
compare_classif(as1.finite_vertices_begin(),as1.finite_vertices_end(),as1,as2.finite_vertices_begin(),as2,"Vertices",debug);
}
void test_dynamic_insert(const std::list<Weighted_point >& lst)
{
typedef std::list<Weighted_point >::const_iterator Iterator;
Iterator min_it=lst.begin();
WFixed_AS dynamic_as;
while(min_it!=lst.end() && dynamic_as.dimension() != 3)
{
dynamic_as.insert(*min_it);
++min_it;
}
// int k=0;
for (Iterator it=min_it ;it!=lst.end(); ++it)
{
// std::cout << ++k << " " << std::flush;
dynamic_as.insert(*it);
WFixed_DT tr_copy;
copy_tds(dynamic_as.tds(),tr_copy.tds(),dynamic_as.infinite_vertex(),tr_copy.infinite_vertex());
WFixed_AS static_as (tr_copy);
compare_all(dynamic_as,static_as);
}
std::cout << "done"<< std::endl;
}
void test_dynamic_remove(const std::list<Weighted_point >& lst)
{
typedef std::list<Weighted_point >::const_iterator Iterator;
WFixed_AS dynamic_as(lst.begin(),lst.end());
// int k=0;
while (dynamic_as.dimension() == 3)
{
// std::cout << ++k << " " << std::flush;
WFixed_DT tr_copy;
copy_tds(dynamic_as.tds(),tr_copy.tds(),dynamic_as.infinite_vertex(),tr_copy.infinite_vertex());
WFixed_AS static_as( tr_copy );
compare_all(dynamic_as,static_as);
dynamic_as.remove(dynamic_as.finite_vertices_begin());
}
std::cout << "done"<< std::endl;
while (dynamic_as.number_of_vertices() != 0) dynamic_as.remove(dynamic_as.finite_vertices_begin());
}
void make_one_run(const char* filename){
std::cout << "== testing with " << filename << " ==\n";
//read weighted points
std::list<Weighted_point > lst;
fill_wp_lists(filename,lst);
//---Test weighted alpha shape
//build regular triangulation
WFixed_DT T(lst.begin(),lst.end());
if (lst.size()!=T.number_of_vertices())
std::cout << lst.size()-T.number_of_vertices() << " hidden vertices.\n";
std::cout << "Build Fixed weighted alpha complex" << std::endl;
WFixed_AS wfixed_as(T);
//copy triangulation for familly alpha-shape
WDT T1;
copy_tds(wfixed_as.tds(),T1.tds(),wfixed_as.infinite_vertex(),T1.infinite_vertex());
std::cout << "Build familly weighted alpha complex" << std::endl;
WAS w_as(T1,0,WAS::GENERAL);
//DEBUG info
// print_comparison(wfixed_as,w_as);
//compare classification of simplices
std::cout << "Compare both.... ";
compare_all(wfixed_as,w_as);
std::cout << "OK\n";
//---Test alpha shape
Fixed_DT delaunay0(lst.begin(),lst.end());
DT delaunay1;
copy_tds(delaunay0.tds(),delaunay1.tds(),delaunay0.infinite_vertex(),delaunay1.infinite_vertex());
std::cout << "Build Fixed alpha complex" << std::endl;
Fixed_AS fixed_as(delaunay0);
std::cout << "Build familly alpha complex" << std::endl;
AS as(delaunay1,0,AS::GENERAL);
std::cout << "Compare both.... ";
compare_all(fixed_as,as);
std::cout << "OK\n";
//test dynamic version
std::cout << "Test dynamic remove \n";
test_dynamic_remove(lst);
std::cout << "Test dynamic insert \n";
test_dynamic_insert(lst);
}
int main(int argc, char** argv){
if (argc==1){
std::cerr << "Nothing was tested\n";
return EXIT_SUCCESS;
}
for (int i=1;i<argc;++i) make_one_run(argv[i]);
return 0;
}