mirror of https://github.com/CGAL/cgal
Some fixes (thanks Michael H.)
This commit is contained in:
parent
52e2f1f327
commit
04b5f686c5
|
|
@ -616,6 +616,8 @@ Envelope_2/doc_tex/Envelope_2/fig/ex_circle.eps -text svneol=unset#application/p
|
||||||
Envelope_2/doc_tex/Envelope_2/fig/ex_circle.fig -text svneol=unset#application/octet-stream
|
Envelope_2/doc_tex/Envelope_2/fig/ex_circle.fig -text svneol=unset#application/octet-stream
|
||||||
Envelope_2/doc_tex/Envelope_2/fig/ex_circle.gif -text svneol=unset#image/gif
|
Envelope_2/doc_tex/Envelope_2/fig/ex_circle.gif -text svneol=unset#image/gif
|
||||||
Envelope_2/doc_tex/Envelope_2/fig/ex_circle.pdf -text svneol=unset#application/pdf
|
Envelope_2/doc_tex/Envelope_2/fig/ex_circle.pdf -text svneol=unset#application/pdf
|
||||||
|
Envelope_2/doc_tex/Envelope_2/fig/lwrenv.eps -text svneol=unset#application/postscript
|
||||||
|
Envelope_2/doc_tex/Envelope_2/fig/lwrenv.pdf -text svneol=unset#application/pdf
|
||||||
Envelope_2/doc_tex/Envelope_2/fig/min_diag.eps -text svneol=unset#application/postscript
|
Envelope_2/doc_tex/Envelope_2/fig/min_diag.eps -text svneol=unset#application/postscript
|
||||||
Envelope_2/doc_tex/Envelope_2/fig/min_diag.fig -text svneol=unset#application/octet-stream
|
Envelope_2/doc_tex/Envelope_2/fig/min_diag.fig -text svneol=unset#application/octet-stream
|
||||||
Envelope_2/doc_tex/Envelope_2/fig/min_diag.gif -text svneol=unset#image/gif
|
Envelope_2/doc_tex/Envelope_2/fig/min_diag.gif -text svneol=unset#image/gif
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,19 @@
|
||||||
|
\begin{figure}[!htp]
|
||||||
|
\begin{center}
|
||||||
|
\begin{ccTexOnly}
|
||||||
|
\includegraphics{Envelope_2/fig/lwrenv}
|
||||||
|
\end{ccTexOnly}
|
||||||
|
\label{fig:teaser}
|
||||||
|
\begin{ccHtmlOnly}
|
||||||
|
<p><center>
|
||||||
|
<img src="./fig/lwrenv.gif" border=0 alt="Lower Envelope">
|
||||||
|
</center>
|
||||||
|
\end{ccHtmlOnly}
|
||||||
|
\caption{The lower envelope of a set of line segments and hyperbolic
|
||||||
|
arc.}
|
||||||
|
\end{center}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
A continuous curve $C$ in $\reals^2$ is called {\em $x$-monotone}, if
|
A continuous curve $C$ in $\reals^2$ is called {\em $x$-monotone}, if
|
||||||
every vertical line intersects it at a single point at most. For
|
every vertical line intersects it at a single point at most. For
|
||||||
|
|
@ -5,6 +21,8 @@ example, the circle $x^2 + y^2 = 1$ is {\em not} $xy$-monotone as the
|
||||||
vertical line $x = 0$ intersects it at $(0, -1)$ and at $(0, 1)$;
|
vertical line $x = 0$ intersects it at $(0, -1)$ and at $(0, 1)$;
|
||||||
however, it is possible to split the circle into an upper part and a
|
however, it is possible to split the circle into an upper part and a
|
||||||
lower part, such that both of these parts are $x$-monotone.
|
lower part, such that both of these parts are $x$-monotone.
|
||||||
|
We consider vertical segments as {\em weakly} $x$-monotone, to properly
|
||||||
|
handle inputs that contain such vertical curves.
|
||||||
|
|
||||||
An $x$-monotone curve can be represented as a univariate function
|
An $x$-monotone curve can be represented as a univariate function
|
||||||
$y = C(x)$, defined over some continuous range $R_C \subseteq \reals$.
|
$y = C(x)$, defined over some continuous range $R_C \subseteq \reals$.
|
||||||
|
|
@ -45,7 +63,7 @@ Given a set of $x$-monotone curves $\calC$, the {\em minimization
|
||||||
diagram} of $\calC$ is a subdivision of the $x$-axis into cells,
|
diagram} of $\calC$ is a subdivision of the $x$-axis into cells,
|
||||||
such that the identity of the curves that induce the lower envelope
|
such that the identity of the curves that induce the lower envelope
|
||||||
over a specific cell of the subdivision (an edge or a vertex) is the
|
over a specific cell of the subdivision (an edge or a vertex) is the
|
||||||
same. In non-degenerate situation, an edge --- which represents a
|
same. In non-degenerate situations, an edge --- which represents a
|
||||||
continuous interval on the $x$-axis --- is induced by a single
|
continuous interval on the $x$-axis --- is induced by a single
|
||||||
curve (or by no curves at all, if there are no $x$-monotone curves
|
curve (or by no curves at all, if there are no $x$-monotone curves
|
||||||
defined over the interval), and a vertex is induced by a single curve
|
defined over the interval), and a vertex is induced by a single curve
|
||||||
|
|
@ -62,11 +80,9 @@ the boundary of its range of definition $R_{C_k}$ onto the $x$-axis
|
||||||
and label the features it induces accordingly. Given a set
|
and label the features it induces accordingly. Given a set
|
||||||
$\hat{\calC}$ of (non necessarily $x$-monotone) curves in $\reals^2$,
|
$\hat{\calC}$ of (non necessarily $x$-monotone) curves in $\reals^2$,
|
||||||
we subdivide each curve into a finite number of weakly $x$-monotone
|
we subdivide each curve into a finite number of weakly $x$-monotone
|
||||||
curves,\footnote{We consider vertical segments as {\em weakly}
|
curves, and obtain the set $\calC$. Then, we split the set into two
|
||||||
$x$-monotone, to handle degenerate inputs properly.} and obtain the set
|
disjoint subsets $\calC_1$ and $\calC_2$, and we compute their envelope
|
||||||
$\calC$. Then, we split the set into two disjoint subsets $\calC_1$
|
diagrams recursively. Finally, we merge the diagrams in linear time by
|
||||||
and $\calC_2$, and we compute their envelope diagrams recursively.
|
|
||||||
Finally, we merge the diagrams, and we do this in linear time
|
|
||||||
traversing both diagrams in parallel.
|
traversing both diagrams in parallel.
|
||||||
|
|
||||||
\section{The Envelope Diagram}
|
\section{The Envelope Diagram}
|
||||||
|
|
@ -75,11 +91,11 @@ traversing both diagrams in parallel.
|
||||||
|
|
||||||
The package basically contains two sets of free functions:
|
The package basically contains two sets of free functions:
|
||||||
\ccc{lower_envelope_x_monotone_2 (begin, end, diag)} (similarly
|
\ccc{lower_envelope_x_monotone_2 (begin, end, diag)} (similarly
|
||||||
\ccc{upper_envelope_x_monotone_2()}) accepts a range of $x$-monotone
|
\ccc{upper_envelope_x_monotone_2()}) construct the envelope diagram
|
||||||
curves and computes the envelope diagram;
|
for a given range of $x$-monotone curves, while
|
||||||
\ccc{lower_envelope_2 (begin, end, diag)} (similarly
|
\ccc{lower_envelope_2 (begin, end, diag)} (similarly
|
||||||
\ccc{upper_envelope_2()}) accepts a range of {\em arbitrary} (not
|
\ccc{upper_envelope_2()}) construct the envelope diagram for a
|
||||||
necessarily $x$-monotone) curves and computes the envelope diagram.
|
range of {\em arbitrary} (not necessarily $x$-monotone) curves.
|
||||||
In this section we explain more on the structure of the envelope
|
In this section we explain more on the structure of the envelope
|
||||||
diagram these functions output.
|
diagram these functions output.
|
||||||
|
|
||||||
|
|
@ -100,7 +116,7 @@ The minimization diagram is shown at the bottom, where
|
||||||
each diagram vertex points to the point associated with it, and the
|
each diagram vertex points to the point associated with it, and the
|
||||||
labels of the segment that induce a diagram edge are displayed below
|
labels of the segment that induce a diagram edge are displayed below
|
||||||
this edge. Note that there exists one edge that represents an overlap
|
this edge. Note that there exists one edge that represents an overlap
|
||||||
(even if more than a single curve induces it), and there are also a
|
(i.e., there are two segments that induce it), and there are also a
|
||||||
few edges that represent empty intervals.\label{env2_fig:min_diag}}
|
few edges that represent empty intervals.\label{env2_fig:min_diag}}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
|
@ -116,12 +132,12 @@ Figure~\ref{env2_fig:min_diag} shows the lower envelope of a set of
|
||||||
eight line segments, and sketches the structure of their minimization
|
eight line segments, and sketches the structure of their minimization
|
||||||
diagram. Each diagram vertex $v$ is associated with a point $p_v$ on
|
diagram. Each diagram vertex $v$ is associated with a point $p_v$ on
|
||||||
the envelope, which corresponds to either a curve endpoint
|
the envelope, which corresponds to either a curve endpoint
|
||||||
or to an intersection point of two curves (or more). The vertex is
|
or to an intersection point of two (or more) curves. The vertex is
|
||||||
therefore associated with a set of $x$-monotone curves that induce the
|
therefore associated with a set of $x$-monotone curves that induce the
|
||||||
envelope over $p_v$. Each vertex is incident to two edges, one lying
|
envelope over $p_v$. Each vertex is incident to two edges, one lying
|
||||||
to its left and the other to its right.
|
to its left and the other to its right.
|
||||||
|
|
||||||
An edge in the envelope diagram represent a continuous portion of the
|
An edge in the envelope diagram represents a continuous portion of the
|
||||||
$x$-axis, and is associated with a set of $x$-monotone curves that
|
$x$-axis, and is associated with a set of $x$-monotone curves that
|
||||||
induce the envelope over this interval. Note that this set may be
|
induce the envelope over this interval. Note that this set may be
|
||||||
empty if no $x$-monotone curves are defined over this interval. In
|
empty if no $x$-monotone curves are defined over this interval. In
|
||||||
|
|
@ -144,12 +160,15 @@ Any model of the \ccRefName\ concept must define a geometric
|
||||||
traits class, which in turn defines the \ccc{Point_2} and
|
traits class, which in turn defines the \ccc{Point_2} and
|
||||||
\ccc{X_monotone_curve_2} types defined with the diagram features.
|
\ccc{X_monotone_curve_2} types defined with the diagram features.
|
||||||
The geometric traits class must be a model of the
|
The geometric traits class must be a model of the
|
||||||
\ccc{ArrangementXMonotoneTraits_2} concept in case we compute
|
\ccc{ArrangementXMonotoneTraits_2} concept in case we construct
|
||||||
envelopes of $x$-monotone curves. If we are interested in handling
|
envelopes of $x$-monotone curves. If we are interested in handling
|
||||||
arbitrary (not necessarily $x$-monotone) curves, the traits class
|
arbitrary (not necessarily $x$-monotone) curves, the traits class
|
||||||
must be a model of the refined \ccc{ArrangementTraits_2} concept.
|
must be a model of the \ccc{ArrangementTraits_2} concept. This
|
||||||
In the latter case, the traits class also defines a \ccc{Curve_2}
|
concepts refined the \ccc{ArrangementXMonotoneTraits_2} concept;
|
||||||
type.
|
a traits class that models this concepts must also defines a
|
||||||
|
\ccc{Curve_2} type, representing an arbitrary planar curve, and
|
||||||
|
provide a functor for subdividing such curves into $x$-monotone
|
||||||
|
subcurves.
|
||||||
|
|
||||||
\section{Examples}
|
\section{Examples}
|
||||||
%=================
|
%=================
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
|
@ -16,11 +16,13 @@
|
||||||
An edge record in an envelope diagram, which represents a continuous portion
|
An edge record in an envelope diagram, which represents a continuous portion
|
||||||
of the $x$-axis. It is associated with a (possibly empty) set of curves that
|
of the $x$-axis. It is associated with a (possibly empty) set of curves that
|
||||||
induce the envelope over this portion of the $x$-axis. Note that all curves
|
induce the envelope over this portion of the $x$-axis. Note that all curves
|
||||||
in this set overlap of the interval represented by the edge.
|
in this set overlap over the interval represented by the edge.
|
||||||
|
|
||||||
\ccTypes
|
\ccTypes
|
||||||
%=======
|
%=======
|
||||||
|
|
||||||
|
\ccNestedType{Size}{the size type (convertible to \ccc{size_t}).}
|
||||||
|
|
||||||
\ccNestedType{Vertex}{the corresponding diagram-vertex type.}
|
\ccNestedType{Vertex}{the corresponding diagram-vertex type.}
|
||||||
|
|
||||||
\ccNestedType{X_monotone_curve_2}{the $x$-monotone curve type.}
|
\ccNestedType{X_monotone_curve_2}{the $x$-monotone curve type.}
|
||||||
|
|
@ -55,10 +57,12 @@ in this set overlap of the interval represented by the edge.
|
||||||
{return a past-the-end iterator for the $x$-monotone curves associated with \ccVar.}
|
{return a past-the-end iterator for the $x$-monotone curves associated with \ccVar.}
|
||||||
|
|
||||||
\ccMethod{Vertex_const_handle left() const;}
|
\ccMethod{Vertex_const_handle left() const;}
|
||||||
{returns the vertex lying to \ccVar's left.}
|
{returns the vertex lying to \ccVar's left.
|
||||||
\ccGlue
|
\ccPrecond{\ccVar\ is not the leftmost edge in the diagram.}}
|
||||||
|
|
||||||
\ccMethod{Vertex_const_handle right() const;}
|
\ccMethod{Vertex_const_handle right() const;}
|
||||||
{returns the vertex lying to \ccVar's right.}
|
{returns the vertex lying to \ccVar's right.
|
||||||
|
\ccPrecond{\ccVar\ is not the rightmost edge in the diagram.}}
|
||||||
|
|
||||||
\ccModifiers
|
\ccModifiers
|
||||||
%===========
|
%===========
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
%============
|
%============
|
||||||
|
|
||||||
A vertex record in an envelope diagram. It is always associated with a point
|
A vertex record in an envelope diagram. It is always associated with a point
|
||||||
on the lower (upper) envelope of a set of curves. A vertex is also
|
on the lower (upper) envelope of a non-empty set of curves. A vertex is also
|
||||||
associated with a set of $x$-monotone curves that induce the envelope
|
associated with a set of $x$-monotone curves that induce the envelope
|
||||||
over this point. It is incident to two edges, one lying to its
|
over this point. It is incident to two edges, one lying to its
|
||||||
left and the other to its right.
|
left and the other to its right.
|
||||||
|
|
@ -22,6 +22,8 @@ left and the other to its right.
|
||||||
\ccTypes
|
\ccTypes
|
||||||
%=======
|
%=======
|
||||||
|
|
||||||
|
\ccNestedType{Size}{the size type (convertible to \ccc{size_t}).}
|
||||||
|
|
||||||
\ccNestedType{Edge}{the corresponding diagram-edge type.}
|
\ccNestedType{Edge}{the corresponding diagram-edge type.}
|
||||||
|
|
||||||
\ccNestedType{Point_2}{the point type associated with the vertex.}
|
\ccNestedType{Point_2}{the point type associated with the vertex.}
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,14 @@
|
||||||
|
|
||||||
The default envelope-diagram class used by the envelops functions to represent
|
The default envelope-diagram class used by the envelops functions to represent
|
||||||
the lower or the upper envelope of a set of curves. It is parameterized by a
|
the lower or the upper envelope of a set of curves. It is parameterized by a
|
||||||
traits class, which is a model of the \ccc{ArrangementXMontoneTraits_2}
|
traits class, which is a model of the \ccc{ArrangementXMonotoneTraits_2}
|
||||||
concept, in case we handle only envelopes of $x$-monotone curves, or of the
|
concept, in case we handle only envelopes of $x$-monotone curves, or of the
|
||||||
refined \ccc{ArrangementTraits_2} concept in case we handle arbitrary planar
|
refined \ccc{ArrangementTraits_2} concept in case we handle arbitrary planar
|
||||||
curves.
|
curves.
|
||||||
|
|
||||||
|
The space needed by this envelope-diagram class is linear in the size of
|
||||||
|
the minimization diagram, and traversing requires linear time.
|
||||||
|
|
||||||
\ccInclude{CGAL/Env_default_diagram_1.h}
|
\ccInclude{CGAL/Env_default_diagram_1.h}
|
||||||
|
|
||||||
\ccIsModel
|
\ccIsModel
|
||||||
|
|
|
||||||
|
|
@ -13,16 +13,16 @@
|
||||||
\ccDefinition
|
\ccDefinition
|
||||||
%============
|
%============
|
||||||
|
|
||||||
This concept defines the representation of an evelope diagram of a set
|
This concept defines the representation of an envelope diagram of a set
|
||||||
of planar curve. The {\em envelope diagram} is a subdivision of the $x$-axis
|
of planar curve. The {\em envelope diagram} is a subdivision of the $x$-axis
|
||||||
into $0$-dimensional cells ({\em vertices}) and $1$-dimensional cells
|
into $0$-dimensional cells ({\em vertices}) and $1$-dimensional cells
|
||||||
({\em edges}), such that the identity of the curves that induce the lower
|
({\em edges}), such that the identity of the curves that induce the lower
|
||||||
envelope (or the upper envelope) over each cell is fixed.
|
envelope (or the upper envelope) over each cell is fixed.
|
||||||
|
|
||||||
A vertex in an envelope diagram is therefore associated with a point
|
A vertex in an envelope diagram is therefore associated with a point
|
||||||
on the lower (upper) envelope, and corresponds to either a curve endpoint
|
on the envelope, and corresponds to either a curve endpoint
|
||||||
or to an intersection point of two curves (or more). The vertex is also
|
or to an intersection point of two (or more) curves. Therefore each vertex
|
||||||
associated with a set of $x$-monotone curves that induce the envelope
|
is associated with a set of $x$-monotone curves that induce the envelope
|
||||||
over this point. Each vertex is incident to two edges, one lying to its
|
over this point. Each vertex is incident to two edges, one lying to its
|
||||||
left and the other to its right.
|
left and the other to its right.
|
||||||
|
|
||||||
|
|
@ -51,7 +51,7 @@ traits class, which in turn defines the \ccc{Point_2} and
|
||||||
\ccTypedef{typedef Traits_2::X_monotone_curve_2 X_monotone_curve_2;}
|
\ccTypedef{typedef Traits_2::X_monotone_curve_2 X_monotone_curve_2;}
|
||||||
{the $x$-monotone curve type.}
|
{the $x$-monotone curve type.}
|
||||||
|
|
||||||
\ccNestedType{Size}{the size type.}
|
\ccNestedType{Size}{the size type (convertible to \ccc{size_t}).}
|
||||||
|
|
||||||
\ccNestedType{Curve_const_iterator}
|
\ccNestedType{Curve_const_iterator}
|
||||||
{an iterator for the $x$-monotone curves that induce a diagram feature.
|
{an iterator for the $x$-monotone curves that induce a diagram feature.
|
||||||
|
|
@ -62,20 +62,25 @@ traits class, which in turn defines the \ccc{Point_2} and
|
||||||
\ccNestedType{Edge}{the edge type, a model of the concept \ccc{EnvelopeDiagramEdge}.}
|
\ccNestedType{Edge}{the edge type, a model of the concept \ccc{EnvelopeDiagramEdge}.}
|
||||||
|
|
||||||
\ccNestedType{Vertex_handle}
|
\ccNestedType{Vertex_handle}
|
||||||
{a handle to a diagram vertex.
|
{a handle to a diagram vertex.}
|
||||||
The \ccc{Vertex_const_handle} type is also defined.}
|
|
||||||
\ccGlue
|
\ccGlue
|
||||||
|
\ccNestedType{Vertex_const_handle}
|
||||||
|
{a non-mutable handle to a diagram vertex.}
|
||||||
|
|
||||||
\ccNestedType{Edge_handle}
|
\ccNestedType{Edge_handle}
|
||||||
{a handle to a diagram edge.
|
{a handle to a diagram edge.}
|
||||||
The \ccc{Edge_const_handle} type is also defined.}
|
\ccGlue
|
||||||
|
\ccNestedType{Edge_const_handle}
|
||||||
|
{a non-mutable handle to a diagram edge.}
|
||||||
|
|
||||||
\ccCreation
|
\ccCreation
|
||||||
\ccCreationVariable{diag}
|
\ccCreationVariable{diag}
|
||||||
%========================
|
%========================
|
||||||
|
|
||||||
\ccConstructor{EnvelopeDiagram_1();}
|
\ccConstructor{EnvelopeDiagram_1();}
|
||||||
{constructs an empty diagram containing one unbounded face,
|
{constructs an empty diagram containing one unbounded edge,
|
||||||
which corresponds to the entire plane and has no originators.}
|
which corresponds to the entire plane and has no $x$-monotone
|
||||||
|
curves that are associated with it.}
|
||||||
|
|
||||||
\ccConstructor{Envelope_diagram_1 (const Self& other);}
|
\ccConstructor{Envelope_diagram_1 (const Self& other);}
|
||||||
{copy constructor.}
|
{copy constructor.}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
\label{env2_ref_sec:intro}
|
\label{env2_ref_sec:intro}
|
||||||
% ========================
|
% ========================
|
||||||
|
|
||||||
This package consits of functions that compute the lower (or upper)
|
This package consists of functions that compute the lower (or upper)
|
||||||
envelope of a set of arbitrary curves in 2D. The output is
|
envelope of a set of arbitrary curves in 2D. The output is
|
||||||
represented as an envelope diagram, namely a subdivision of the
|
represented as an envelope diagram, namely a subdivision of the
|
||||||
$x$-axis into intervals, such that the identity of the curves that
|
$x$-axis into intervals, such that the identity of the curves that
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
represented using the output minimization diagram \ccc{diag},
|
represented using the output minimization diagram \ccc{diag},
|
||||||
which must be a model of the \ccc{EnvelopeDiagram_1} concept.
|
which must be a model of the \ccc{EnvelopeDiagram_1} concept.
|
||||||
\ccPrecond{The value-type of \ccc{InputIterator} is
|
\ccPrecond{The value-type of \ccc{InputIterator} is
|
||||||
\ccc{EnvelopeDiagram::Traits_2::X_monotone_curve_2}.}}
|
\ccc{EnvelopeDiagram::X_monotone_curve_2}.}}
|
||||||
|
|
||||||
\end{ccRefFunction}
|
\end{ccRefFunction}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
represented using the output maximization diagram \ccc{diag},
|
represented using the output maximization diagram \ccc{diag},
|
||||||
which must be a model of the \ccc{EnvelopeDiagram_1} concept.
|
which must be a model of the \ccc{EnvelopeDiagram_1} concept.
|
||||||
\ccPrecond{The value-type of \ccc{InputIterator} is
|
\ccPrecond{The value-type of \ccc{InputIterator} is
|
||||||
\ccc{EnvelopeDiagram::Traits_2::X_monotone_curve_2}.}}
|
\ccc{EnvelopeDiagram::X_monotone_curve_2}.}}
|
||||||
|
|
||||||
\end{ccRefFunction}
|
\end{ccRefFunction}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ int main (int argc, char **argv)
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the points from the file, and consturct their dual lines.
|
// Read the points from the file, and construct their dual lines.
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
int px, py;
|
int px, py;
|
||||||
std::vector<Point_2> points;
|
std::vector<Point_2> points;
|
||||||
|
|
@ -48,7 +48,7 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
in_file >> n;
|
in_file >> n;
|
||||||
points.resize (n);
|
points.resize (n);
|
||||||
for (k = 0; k < n; k++)
|
for (k = 0; k < n; ++k)
|
||||||
{
|
{
|
||||||
in_file >> px >> py;
|
in_file >> px >> py;
|
||||||
points[k] = Point_2 (px, py);
|
points[k] = Point_2 (px, py);
|
||||||
|
|
@ -74,9 +74,9 @@ int main (int argc, char **argv)
|
||||||
upper_envelope_x_monotone_2 (dual_lines.begin(), dual_lines.end(),
|
upper_envelope_x_monotone_2 (dual_lines.begin(), dual_lines.end(),
|
||||||
max_diag);
|
max_diag);
|
||||||
|
|
||||||
// Output the points along the boundary convex hull in a counterclockwise
|
// Output the points along the boundary convex hull in counterclockwise
|
||||||
// order. We start by traversing the minimization diagram from left to
|
// order. We start by traversing the minimization diagram from left to
|
||||||
// right, then the maximization diagram from left to right.
|
// right, then the maximization diagram from right to left.
|
||||||
Diagram_1::Edge_const_handle e = min_diag.leftmost();
|
Diagram_1::Edge_const_handle e = min_diag.leftmost();
|
||||||
|
|
||||||
std::cout << "The convex hull of " << points.size() << " input points:";
|
std::cout << "The convex hull of " << points.size() << " input points:";
|
||||||
|
|
@ -87,12 +87,12 @@ int main (int argc, char **argv)
|
||||||
e = e->right()->right();
|
e = e->right()->right();
|
||||||
}
|
}
|
||||||
|
|
||||||
e = max_diag.leftmost();
|
e = max_diag.rightmost();
|
||||||
while (e != max_diag.rightmost())
|
while (e != max_diag.leftmost())
|
||||||
{
|
{
|
||||||
k = e->curve().data(); // The index of the dual point.
|
k = e->curve().data(); // The index of the dual point.
|
||||||
std::cout << " (" << points[k] << ')';
|
std::cout << " (" << points[k] << ')';
|
||||||
e = e->right()->right();
|
e = e->left()->left();
|
||||||
}
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue