mirror of https://github.com/CGAL/cgal
merge candidate package into trunk
This commit is contained in:
parent
b3687d7b64
commit
d1ab01a9b0
|
|
@ -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/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/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_bw.png -text svneol=unset#image/png
|
||||
Apollonius_graph_2/doc_tex/Apollonius_graph_2/apollonius-entire_edge.gif -text svneol=unset#image/gif
|
||||
|
|
|
|||
|
|
@ -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/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/*.vcproj
|
||||
Apollonius_graph_2/demo/Apollonius_graph_2/Makefile
|
||||
|
|
|
|||
|
|
@ -1,11 +1,18 @@
|
|||
|
||||
\begin{ccPkgDescription}{3D Alpha Shapes\label{Pkg:AlphaShapes3}}
|
||||
\ccPkgHowToCiteCgal{cgal:dy-as3-10}
|
||||
\ccPkgSummary{This package offers a data structure encoding the whole family of alpha-complexes
|
||||
related to a given 3D Delaunay or regular triangulation. In particular, the data structure
|
||||
\ccPkgSummary{
|
||||
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
|
||||
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}}
|
||||
\ccPkgIntroducedInCGAL{2.3}
|
||||
|
|
|
|||
|
|
@ -72,22 +72,47 @@ The alpha complex is a subcomplex
|
|||
of the Delaunay triangulation.
|
||||
For a given value of $\alpha$, the alpha complex includes
|
||||
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
|
||||
do not include any points of $S$.
|
||||
The alpha shape is then simply the domain covered by the simplices
|
||||
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
|
||||
singular faces. For $0 \leq k \leq d-1$,
|
||||
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
|
||||
CGAL provides two versions of the alpha shapes. In the general mode,
|
||||
singular if it is not a facet of a $(k+1)$-simplex of the complex.
|
||||
CGAL provides two versions of 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 regularized mode provides a regularized version of the alpha shapes.
|
||||
It corresponds to the domain covered by a regularized version
|
||||
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
|
||||
with the vertices of the simplex and suborthogonal to all the other
|
||||
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
|
||||
general or regularized.
|
||||
the domain covered by a the alpha complex and comes in general and
|
||||
regularized versions.
|
||||
|
||||
|
||||
|
||||
|
|
@ -145,6 +170,8 @@ general or regularized.
|
|||
|
||||
\section{Functionality \label{I1_SectAlpha_Shape_3}}
|
||||
|
||||
\subsection{Family of alpha shapes}
|
||||
|
||||
The class \ccc{CGAL::Alpha_shape_3<Dt>} represents the whole
|
||||
family of alpha shapes for a given set of points.
|
||||
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
|
||||
alpha complex.
|
||||
|
||||
|
||||
The class \ccc{CGAL::Alpha_shape_3<Dt>} provides functions to set and
|
||||
The class provides functions to set and
|
||||
get the current $\alpha$-value, as well as an iterator that enumerates
|
||||
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
|
||||
an output iterator with \ccc{CGAL::object}
|
||||
as value type, outputs the faces of the triangulation
|
||||
|
|
@ -189,30 +201,84 @@ such that the alpha shape satisfies the following two properties~\\
|
|||
\smallskip
|
||||
The current implementation is static, that is after its construction
|
||||
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}}
|
||||
|
||||
|
||||
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
|
||||
\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
|
||||
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.
|
||||
The requirements of this class are described in the
|
||||
concept \ccc{CGAL::AlphaShapeTraits_3} for which
|
||||
the \cgal\ kernels are models in the non-weighted case, and for which
|
||||
the class \ccc{CGAL::Regular_triangulation_euclidean_traits_3} is model
|
||||
For the class \ccc{CGAL::Alpha_shape_3<Dt>}, the requirements of
|
||||
the traits class are described in the concepts \ccc{CGAL::AlphaShapeTraits_3}
|
||||
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
|
||||
the class \ccc{CGAL::Regular_triangulation_euclidean_traits_3} is a model
|
||||
in the weighted case.
|
||||
|
||||
The triangulation data structure of the triangulation with any
|
||||
has to be a model of the concept \ccc{CGAL::TriangulationDataStructure_3}.
|
||||
However it must be parameterized with
|
||||
vertex and cell classes, which are models of the concepts
|
||||
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{AlphaShapeVertex_3} and \ccc{AlphaShapeCell_3}.
|
||||
The package provides by default the classes
|
||||
\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}).
|
||||
|
||||
|
||||
|
||||
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}
|
||||
|
|
@ -241,7 +352,7 @@ as underlying triangulation.
|
|||
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}
|
||||
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}
|
||||
%----------------------------------------------------------------------
|
||||
|
|
@ -255,6 +366,12 @@ The alpha shape is built in \ccc{GENERAL} mode.
|
|||
|
||||
\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
|
||||
Alpha Shapes\label{l1_SectPeriodicAS3D}}
|
||||
|
||||
|
|
@ -276,4 +393,6 @@ covering space is degenerate. In this case an exact constructions
|
|||
kernel needs to be used to compute the alpha shapes. Otherwise the
|
||||
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 |
|
|
@ -5,7 +5,8 @@
|
|||
|
||||
|
||||
\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}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,12 +74,12 @@ provides the following.
|
|||
\ccNestedType{Compute_squared_radius_3}
|
||||
{An object constructor able to compute: \\
|
||||
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
|
||||
smallest circumsphere of 3 points \ccc{p0, p1, p2},\\
|
||||
the squared radius of the smallest circumsphere
|
||||
smallest circumscribing sphere of 3 points \ccc{p0, p1, p2},\\
|
||||
the squared radius of the smallest circumscribing sphere
|
||||
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)}).}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
\ccDefinition
|
||||
|
||||
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
|
||||
of the class \ccc{Dt} which
|
||||
represents connectivity and order among its faces. Each
|
||||
|
|
@ -259,7 +259,7 @@ to \ccc{alpha}.}
|
|||
|
||||
\ccMethod{Classification_type
|
||||
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}.}
|
||||
|
||||
\ccMethod{Classification_type
|
||||
|
|
@ -282,7 +282,7 @@ of the underlying triangulation with respect to \ccc{alpha}.}
|
|||
const FT& alpha = get_alpha());}
|
||||
{Write the cells which are of type \ccc{type} for
|
||||
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.}
|
||||
|
||||
|
||||
|
|
@ -293,7 +293,7 @@ template<class OutputIterator>
|
|||
const FT& alpha= get_alpha());}
|
||||
{Write the facets which are of type \ccc{type} for
|
||||
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.}
|
||||
|
||||
\ccMethod {
|
||||
|
|
@ -303,17 +303,17 @@ template<class OutputIterator>
|
|||
const FT& alpha = get_alpha());}
|
||||
{Write the edges which are of type \ccc{type} for
|
||||
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.}
|
||||
|
||||
\ccMethod {
|
||||
template<class OutputIterator>
|
||||
OutputIterator get_alpha_shape_vertices(OutputIterator it,
|
||||
Classification_type type,
|
||||
const FT& alphaget_alpha());}
|
||||
const FT& alpha);}
|
||||
{Write the vertices which are of type \ccc{type} for
|
||||
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.}
|
||||
|
||||
\ccMethod {
|
||||
|
|
@ -383,7 +383,7 @@ is an internal format.
|
|||
\ccFunction{Geomview_stream& operator<<(Geomview_stream& W,
|
||||
const Alpha_shape_3<Dt>& A);}
|
||||
{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
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@
|
|||
The class \ccRefName\ is the default model for the concept
|
||||
\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.
|
||||
The second parameter \ccc{Fb} is a base class instantiated by default
|
||||
with \ccc{CGAL::Triangulation_cell_base_3<Traits>}.
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@
|
|||
The class \ccRefName\ is the default model for the concept
|
||||
\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.
|
||||
The second parameter \ccc{Vb} is a base class instantiated by default
|
||||
with \ccc{CGAL::Triangulation_vertex_base_3<Traits>}.
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
||||
|
|
@ -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}
|
||||
|
||||
|
|
@ -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}
|
||||
|
|
@ -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}
|
||||
|
|
@ -43,7 +43,7 @@ and the squared radius of the
|
|||
smallest sphere orthogonal to three weighted points \ccc{p0, p1, p2},
|
||||
and the squared radius of smallest sphere orthogonal to
|
||||
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}.}
|
||||
|
||||
\ccCreation
|
||||
|
|
|
|||
|
|
@ -51,7 +51,8 @@
|
|||
%\section{Reference pages for Alpha Shapes in 3D}
|
||||
|
||||
\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
|
||||
triangulation that may be a Delaunay triangulation
|
||||
|
|
@ -65,7 +66,7 @@ The alpha complex is a subcomplex
|
|||
of the Delaunay triangulation.
|
||||
For a given value of $\alpha$, the alpha complex includes
|
||||
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
|
||||
do not include any points of $S$.
|
||||
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$,
|
||||
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
|
||||
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
|
||||
$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
|
||||
and having less than a given number of connected components.
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
with the vertices of the simplex and suborthogonal to all the other
|
||||
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
|
||||
general or regularized.
|
||||
the domain covered by a the alpha complex.
|
||||
|
||||
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}
|
||||
|
|
@ -122,6 +125,10 @@ general or regularized.
|
|||
\ccRefConceptPage{WeightedAlphaShapeTraits_3} \\
|
||||
\ccRefConceptPage{AlphaShapeCell_3}\\
|
||||
\ccRefConceptPage{AlphaShapeVertex_3}\\
|
||||
\ccRefConceptPage{FixedAlphaShapeTraits_3}\\
|
||||
\ccRefConceptPage{FixedWeightedAlphaShapeTraits_3} \\
|
||||
\ccRefConceptPage{FixedAlphaShapeCell_3}\\
|
||||
\ccRefConceptPage{FixedAlphaShapeVertex_3}\\
|
||||
|
||||
|
||||
\subsection*{Classes}
|
||||
|
|
@ -130,3 +137,7 @@ general or regularized.
|
|||
%\ccRefIdfierPage{CGAL::Weighted_alpha_shape_euclidean_traits_3<K>}\\
|
||||
\ccRefIdfierPage{CGAL::Alpha_shape_vertex_base_3<Traits,Vb>}\\
|
||||
\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>}
|
||||
|
|
|
|||
|
|
@ -17,4 +17,12 @@
|
|||
\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/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
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ int main()
|
|||
|
||||
// compute alpha shape
|
||||
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;
|
||||
|
||||
// find optimal alpha value
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -28,14 +28,15 @@ namespace CGAL {
|
|||
|
||||
//------------------ 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>
|
||||
class Weighted_alpha_shape_euclidean_traits_3 : public
|
||||
Regular_triangulation_euclidean_traits_3<K>
|
||||
{};
|
||||
|
||||
#endif //CGAL_NO_DEPRECATED_CODE
|
||||
|
||||
|
||||
} //namespace CGAL
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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() );
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1 @@
|
|||
data/small-exp.in data/small.in
|
||||
|
|
@ -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;
|
||||
}
|
||||
Loading…
Reference in New Issue