Removed Ron from maintainer list. Updated Ron's email address. Cleaned up documentation and example programs

This commit is contained in:
Efi Fogel 2014-08-28 17:05:57 +03:00
parent 7ce44a2615
commit f48ce38473
26 changed files with 270 additions and 353 deletions

View File

@ -432,7 +432,7 @@ function template computes the offset of a given polygon \f$ P\f$
by a rational radius \f$ r\f$ in an exact manner. The input
polygon $P$ must be either simple or degenerate consisting of two
vertices (representing a line segment). The `traits` argument must model
the concept `ArrangementTraits_2`; it should be capable of handling
the concept `ArrangementTraits_2` and it should be capable of handling
conic arcs in an exact manner---using an instance of the
`Arr_conic_traits_2` class template with the number
types provided by the <span class="textsc">Core</span> library is the
@ -455,69 +455,73 @@ considerably slower:
\cgalExample{Minkowski_sum_2/exact_offset.cpp}
\cgalAdvancedBegin
Both functions `approximated_offset_2()` and `offset_polygon_2()`
Both functions templates `approximated_offset_2()` and `offset_polygon_2()`
also have overloaded versions that accept a decomposition strategy
and use the polygon-decomposition approach to compute (or approximate)
the offset. These functions are less efficient than their counterparts
that employ the convolution approach, and are only included in the package
for the sake of completeness.
the offset. These functions are typically considerably slower than their
counterparts that employ the convolution approach. However, similar to the
functions that compute the general Minkowski sum, they are able to compute
the offset of polygons with holes, given a decomposition strategy that
handles polygons with holes, such as the
'Polygon_vertical_decomposition_2<Kernel>' class template.
\cgalAdvancedEnd
\subsection mink_ssecinner_offset Computing Inner Offsets
An operation closely related to the offset computation, is obtaining the
<I>inner offset</I> of a polygon, or <I>insetting</I> it by a given radius.
The inset of a polygon \f$ P\f$ with radius \f$ r\f$ is the set of points
iside \f$ P\f$ whose distance from the polygon boundary, denoted
\f$ \partial P\f$, is at least \f$ r\f$, namely:
\f$ \{ p \in P \;|\; {\rm dist}(p, \partial P) \geq r \}\f$.
Note that the resulting set may not be connected in case \f$ P\f$ is a
non-convex polygon that has some narrow components, and thus is
characterized by a (possibly empty) set of polygons whose edges are
line segments and circular arcs of radius \f$ r\f$.
An operation closely related to the (outer) offset computation, is
computing the <I>inner offset</I> of a polygon, or <I>insetting</I> it
by a given radius. The inset of a polygon \f$ P\f$ with radius
\f$ r\f$ is the set of points iside \f$ P\f$ the distance of which
from the polygon boundary, denoted \f$ \partial P\f$, is at least \f$ r\f$,
namely: \f$ \{ p \in P \;|\; {\rm dist}(p, \partial P) \geq r \}\f$.
Note that the resulting point set may be dicconnected when \f$ P\f$ is a
non-convex polygon that has some narrow components. In such a case the
resulting set is characterized by a (possibly empty) set of polygons the
edges of which are line segments and circular arcs of radius \f$ r\f$.
The offset can be computed using the convolution method if we traverse the
polygon in a <I>clockwise</I> orientation (and not in <I>counterclockwise</I>
orientation, as done in case of ofsetting a polygon).
As in case of the offset functions, the Minkowski-sum package contains two
functions for insetting a simple polygon:
The inset can be computed using the convolution method traversing the
polygon in a <I>clockwise</I> order (as oppose to the
<I>counterclockwise</I> order applied in the case of ofsetting a polygon).
As with the (outer) offset functions, the Minkowski-sum package contains two
functions for insetting a simple polygon, namely,
`approximated_inset_2(P, r, eps, oi)` and `inset_polygon_2(P, r, traits, oi)`.
The function \link approximated_inset_2() `approximated_inset_2(P, r, eps, oi)`\endlink accepts a polygon
\f$ P\f$, an inset radius \f$ r\f$ and \f$ \varepsilon > 0\f$. It constructs an
approximation for the inset of \f$ P\f$ by the radius \f$ r\f$, with the approximation
error bounded by \f$ \varepsilon\f$. The function returns its output via the
output iterator `oi`, whose value-type must be
`Gps_circle_segment_traits_2::Polygon_2` representing
the polygons that approximates the inset polygon.
The \link approximated_inset_2() `approximated_inset_2(P, r, eps, oi)`\endlink
function template accepts a polygon \f$ P\f$, an inset radius \f$ r\f$,
(a floating-point number) \f$ \epsilon > 0 \f$, and an output
iterator `oi`, whose value-type must be an instance of the class template
`Gps_circle_segment_traits_2::Polygon_2`. . It constructs an approximation
of the inset of \f$ P\f$ by the radius \f$ r\f$, where the approximation
error is bounded by \f$ \epsilon\f$. The function returns the polygons that
approximate the inset polygon through the output iterator `oi`.
\cgalExample{Minkowski_sum_2/approx_inset.cpp}
Similarly, the function
\link inset_polygon_2() `inset_polygon_2(P, r, traits, oi)` \endlink computes
the exact inset of \f$ P\f$ with radius \f$ r\f$, and returns its output via the given
output iterator `oi`. The `traits` parameter should be an instance of
an arrangement-traits class that is capable of handling conic arcs in an
exact manner, whereas `oi`'s value-type must be
`Gps_traits_2::Polygon_2`.
Similarly, the function template
\link inset_polygon_2() `inset_polygon_2(P, r, traits, oi)` \endlink
computes the exact inset of \f$ P\f$ with radius \f$ r\f$, and returns
its output through the given output iterator `oi`. The `traits` parameter
must model the concept `ArrangementTraits_2` and it should be capable of
handling conic arcs in an exact manner, whereas the value-type of `oi`
must be an instance of `Gps_traits_2::Polygon_2`.
\cgalExample{Minkowski_sum_2/exact_inset.cpp}
\cgalAdvancedBegin
Unlike the offset functions, there are no overloaded versions of the inset
functions that use convex polygon decomposition to compute insets, as this
method cannot be easily generalized for inset computations.
\cgalAdvancedEnd
Unlike the functions that compute the offsets, there are no overloaded
versions of the functions that compute the insets and use convex polygon
decomposition, as decomposition approach cannot be easily generalized for
inset computations.
In this context let us mention that there exist overloaded versions of the
functions
The package also provides overloaded versions of the functions
\link approximated_offset_2() `approximated_offset_2(P, r, eps)`\endlink
and
\link offset_polygon_2() `offset_polygon_2(P, r, traits)`\endlink
that accept a <I>polygon with holes</I>
\f$ P\f$ and computed its offset. This ofset is obtain by taking the outer offset
of \f$ P\f$'s outer boundary, and computing the inner offsets of \f$ P\f$'s holes.
The former polygon defines the output boundary of \f$ P \oplus B_r\f$, and the latter
define the holes within the result.
\f$ P\f$ and compute its offset. This ofset is obtain by computing the
outer offset of the outer boundary of \f$ P\f$'s, and computing the inner
offsets of the holes of \f$ P\f$. The former polygon defines the output
boundary of \f$ P \oplus B_r\f$, and the latter define the holes within
the result.
\section Minkowski_sum_2Acknowledgements Acknowledgements

View File

@ -1,63 +1,48 @@
//! \file examples/Minkowski_sum_2/approx_inset.cpp
// Computing the approximated inset of a polygon.
#include "ms_rational_nt.h"
#include <CGAL/Lazy_exact_nt.h>
#include <CGAL/Cartesian.h>
#include <CGAL/approximated_offset_2.h>
#include <CGAL/offset_polygon_2.h>
#include <CGAL/Timer.h>
#include <fstream>
#include <iostream>
#include <list>
#include <boost/timer.hpp>
typedef CGAL::Lazy_exact_nt<Number_type> Lazy_exact_nt;
#include <CGAL/basic.h>
#include <CGAL/approximated_offset_2.h>
struct Kernel : public CGAL::Cartesian<Lazy_exact_nt> {};
typedef CGAL::Polygon_2<Kernel> Polygon_2;
#include "bops_circular.h"
typedef CGAL::Gps_circle_segment_traits_2<Kernel> Gps_traits_2;
typedef Gps_traits_2::Polygon_2 Offset_polygon_2;
typedef Gps_traits_2::Polygon_with_holes_2 Offset_polygon_with_holes_2;
typedef CGAL::Polygon_2<Kernel> Linear_polygon;
int main ()
int main(int argc, char* argv[])
{
// Open the input file.
std::ifstream in_file ("tight.dat");
// Open the input file and read a polygon.
const char* filename = (argc > 1) ? argv[1] : "tight.dat";
std::ifstream in_file(filename);
if (! in_file.is_open())
{
if (! in_file.is_open()) {
std::cerr << "Failed to open the input file." << std::endl;
return (1);
return -1;
}
// Read the input polygon.
Polygon_2 P;
Linear_polygon P;
in_file >> P;
in_file.close();
std::cout << "Read an input polygon with "
<< P.size() << " vertices." << std::endl;
std::cout << "Read an input polygon with " << P.size() << " vertices."
<< std::endl;
// Approximate the offset polygon.
const Number_type radius = 1;
const double err_bound = 0.00001;
std::list<Offset_polygon_2> inset_polygons;
std::list<Offset_polygon_2>::iterator iit;
CGAL::Timer timer;
std::list<Polygon> inset_polygons;
boost::timer timer;
approximated_inset_2(P, 1, 0.00001, std::back_inserter(inset_polygons));
double secs = timer.elapsed();
timer.start();
approximated_inset_2 (P, radius, err_bound,
std::back_inserter (inset_polygons));
timer.stop();
std::cout << "The inset comprises "
<< inset_polygons.size() << " polygon(s)." << std::endl;
for (iit = inset_polygons.begin(); iit != inset_polygons.end(); ++iit)
{
std::cout << " Polygon with "
<< iit->size() << " vertices." << std::endl;
}
std::cout << "Inset computation took "
<< timer.time() << " seconds." << std::endl;
return (0);
std::list<Polygon>::iterator it;
std::cout << "The inset comprises " << inset_polygons.size()
<< " polygon(s)." << std::endl;
for (it = inset_polygons.begin(); it != inset_polygons.end(); ++it)
std::cout << " Polygon with " << it->size() << " vertices." << std::endl;
std::cout << "Inset computation took " << secs << " seconds." << std::endl;
return 0;
}

View File

@ -0,0 +1,25 @@
#ifndef ARR_CONICS_H
#define ARR_CONICS_H
#include <CGAL/Cartesian.h>
#include <CGAL/CORE_algebraic_number_traits.h>
#include <CGAL/Arr_conic_traits_2.h>
#include <CGAL/Arrangement_2.h>
typedef CGAL::CORE_algebraic_number_traits Nt_traits;
typedef Nt_traits::Rational Rational;
typedef CGAL::Cartesian<Rational> Rat_kernel;
typedef Rat_kernel::Point_2 Rat_point;
typedef Rat_kernel::Segment_2 Rat_segment;
typedef Rat_kernel::Circle_2 Rat_circle;
typedef Nt_traits::Algebraic Algebraic;
typedef CGAL::Cartesian<Algebraic> Alg_kernel;
typedef CGAL::Arr_conic_traits_2<Rat_kernel, Alg_kernel, Nt_traits>
Traits;
typedef Traits::Point_2 Point;
typedef Traits::Curve_2 Conic_arc;
typedef Traits::X_monotone_curve_2 X_monotone_conic_arc;
typedef CGAL::Arrangement_2<Traits> Arrangement;
#endif

View File

@ -1,80 +1,60 @@
//! \file examples/Minkowski_sum_2/exact_inset.cpp
// Computing the exact inner offset of a polygon.
#include <iostream>
#include <CGAL/basic.h>
#ifndef CGAL_USE_CORE
#include <iostream>
int main ()
int main()
{
std::cout << "Sorry, this example needs CORE ..." << std::endl;
return (0);
return 0;
}
#else
#include <CGAL/Cartesian.h>
#include <CGAL/CORE_algebraic_number_traits.h>
#include <CGAL/Arr_conic_traits_2.h>
#include <fstream>
#include <boost/timer.hpp>
#include <CGAL/Gps_traits_2.h>
#include <CGAL/offset_polygon_2.h>
#include <CGAL/Timer.h>
#include <iostream>
typedef CGAL::CORE_algebraic_number_traits Nt_traits;
typedef Nt_traits::Rational Rational;
typedef Nt_traits::Algebraic Algebraic;
#include "arr_conics.h"
struct Rat_kernel : public CGAL::Cartesian<Rational> {};
struct Alg_kernel : public CGAL::Cartesian<Algebraic> {};
struct Conic_traits_2 : public CGAL::Arr_conic_traits_2<Rat_kernel,
Alg_kernel,
Nt_traits> {};
typedef CGAL::Polygon_2<Rat_kernel> Polygon;
typedef CGAL::Gps_traits_2<Traits> Gps_traits;
typedef Gps_traits::Polygon_2 Offset_polygon;
typedef CGAL::Polygon_2<Rat_kernel> Polygon_2;
typedef CGAL::Gps_traits_2<Conic_traits_2> Gps_traits_2;
typedef Gps_traits_2::Polygon_2 Offset_polygon_2;
int main ()
int main(int argc, char* argv[])
{
// Open the input file.
std::ifstream in_file ("tight.dat");
if (! in_file.is_open())
{
// Open the input file and read the input polygon.
const char* filename = (argc > 1) ? argv[1] : "tight.dat";
std::ifstream in_file(filename);
if (! in_file.is_open()) {
std::cerr << "Failed to open the input file." << std::endl;
return (1);
return -1;
}
// Read the input polygon.
Polygon_2 P;
Polygon P;
in_file >> P;
in_file.close();
std::cout << "Read an input polygon with "
<< P.size() << " vertices." << std::endl;
std::cout << "Read an input polygon with " << P.size() << " vertices."
<< std::endl;
// Compute the inner offset of the polygon.
Conic_traits_2 traits;
const Rational radius = 1;
std::list<Offset_polygon_2> inset_polygons;
std::list<Offset_polygon_2>::iterator iit;
CGAL::Timer timer;
timer.start();
inset_polygon_2 (P, radius, traits,
std::back_inserter (inset_polygons));
timer.stop();
Traits traits;
std::list<Offset_polygon> inset_polygons;
boost::timer timer;
inset_polygon_2(P, 1, traits, std::back_inserter(inset_polygons));
double secs = timer.elapsed();
std::list<Offset_polygon>::iterator it;
std::cout << "The inset comprises "
<< inset_polygons.size() << " polygon(s)." << std::endl;
for (iit = inset_polygons.begin(); iit != inset_polygons.end(); ++iit)
{
std::cout << " Polygon with "
<< iit->size() << " vertices." << std::endl;
}
std::cout << "Inset computation took "
<< timer.time() << " seconds." << std::endl;
return (0);
for (it = inset_polygons.begin(); it != inset_polygons.end(); ++it)
std::cout << " Polygon with " << it->size() << " vertices."
<< std::endl;
std::cout << "Inset computation took " << secs << " seconds." << std::endl;
return 0;
}
#endif

View File

@ -1,75 +1,56 @@
//! \file examples/Minkowski_sum_2/exact_offset.cpp
// Computing the exact offset of a polygon.
#include <iostream>
#include <CGAL/basic.h>
#ifndef CGAL_USE_CORE
#include <iostream>
int main ()
int main()
{
std::cout << "Sorry, this example needs CORE ..." << std::endl;
return (0);
return 0;
}
#else
#include <CGAL/Cartesian.h>
#include <CGAL/CORE_algebraic_number_traits.h>
#include <CGAL/Arr_conic_traits_2.h>
#include <fstream>
#include <boost/timer.hpp>
#include <CGAL/Gps_traits_2.h>
#include <CGAL/offset_polygon_2.h>
#include <CGAL/Timer.h>
#include <iostream>
typedef CGAL::CORE_algebraic_number_traits Nt_traits;
typedef Nt_traits::Rational Rational;
typedef Nt_traits::Algebraic Algebraic;
#include "arr_conics.h"
struct Rat_kernel : public CGAL::Cartesian<Rational> {};
struct Alg_kernel : public CGAL::Cartesian<Algebraic> {};
struct Conic_traits_2 : public CGAL::Arr_conic_traits_2<Rat_kernel,
Alg_kernel,
Nt_traits> {};
typedef CGAL::Polygon_2<Rat_kernel> Polygon;
typedef CGAL::Gps_traits_2<Traits> Gps_traits;
typedef Gps_traits::Polygon_with_holes_2 Offset_polygon_with_holes;
typedef CGAL::Polygon_2<Rat_kernel> Polygon_2;
typedef CGAL::Gps_traits_2<Conic_traits_2> Gps_traits_2;
typedef Gps_traits_2::Polygon_2 Offset_polygon_2;
typedef Gps_traits_2::Polygon_with_holes_2 Offset_polygon_with_holes_2;
int main ()
int main(int argc, char* argv[])
{
// Open the input file.
std::ifstream in_file ("spiked.dat");
if (! in_file.is_open())
{
// Open the input file and read the input polygon.
const char* filename = (argc > 1) ? argv[1] : "spiked.dat";
std::ifstream in_file(filename);
if (! in_file.is_open()) {
std::cerr << "Failed to open the input file." << std::endl;
return (1);
return -1;
}
// Read the input polygon.
Polygon_2 P;
Polygon P;
in_file >> P;
in_file.close();
std::cout << "Read an input polygon with "
<< P.size() << " vertices." << std::endl;
std::cout << "Read an input polygon with " << P.size() << " vertices."
<< std::endl;
// Compute the offset polygon.
Conic_traits_2 traits;
const Rational radius = 5;
Offset_polygon_with_holes_2 offset;
CGAL::Timer timer;
Traits traits;
boost::timer timer;
Offset_polygon_with_holes offset = CGAL::offset_polygon_2(P, 5, traits);
double secs = timer.elapsed();
timer.start();
offset = offset_polygon_2 (P, radius, traits);
timer.stop();
std::cout << "The offset polygon has "
<< offset.outer_boundary().size() << " vertices, "
<< offset.number_of_holes() << " holes." << std::endl;
std::cout << "Offset computation took "
<< timer.time() << " seconds." << std::endl;
return (0);
std::cout << "The offset polygon has " << offset.outer_boundary().size()
<< " vertices, " << offset.number_of_holes() << " holes."
<< std::endl;
std::cout << "Offset computation took " << secs << " seconds." << std::endl;
return 0;
}
#endif

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
// Andreas Fabri <Andreas.Fabri@geometryfactory.com>
// Laurent Rineau <Laurent.Rineau@geometryfactory.com>
// Efi Fogel <efif@post.tau.ac.il>

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_ARR_LABELED_TRAITS_2_H
#define CGAL_ARR_LABELED_TRAITS_2_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
// Efi Fogel <efifogel@gmail.com>
#ifndef CGAL_POLYGON_DECOMPOSITION_STRATEGY_ADAPTER_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_EXACT_OFFSET_BASE_H
#define CGAL_EXACT_OFFSET_BASE_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_MINKOWSKI_SUM_LABELS_H
#define CGAL_MINKOWSKI_SUM_LABELS_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
// Efi Fogel <efifogel@gmail.com>
#ifndef CGAL_MINKOWSKI_SUM_CONV_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_MINKOWSKI_SUM_DECOMP_2_H
#define CGAL_MINKOWSKI_SUM_DECOMP_2_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_OFFSET_CONV_H
#define CGAL_OFFSET_CONV_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_OFFSET_DECOMP_H
#define CGAL_OFFSET_DECOMP_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_DECOMPOSITION_STRATEGY_ADAPTER_H
#define CGAL_DECOMPOSITION_STRATEGY_ADAPTER_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_UNION_OF_CURVE_CYCLES_2_H
#define CGAL_UNION_OF_CURVE_CYCLES_2_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_UNION_OF_CYCLES_2_H
#define CGAL_UNION_OF_CYCLES_2_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_UNION_OF_SEGMENT_CYCLES_2_H
#define CGAL_UNION_OF_SEGMENT_CYCLES_2_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_POLYGON_CONVEX_DECOMPOSITION_H
#define CGAL_POLYGON_CONVEX_DECOMPOSITION_H

View File

@ -12,9 +12,6 @@
// 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) : Efi Fogel <efifogel@gmail.com>
#ifndef CGAL_POLYGON_VERTICAL_DECOMPOSITION_2_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
// (based on an old version by Eyal Flato)
// Efi Fogel <efifogel@gmail.com>

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_APPROXIMATED_OFFSET_H
#define CGAL_APPROXIMATED_OFFSET_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
// Efi Fogel <efifogel@gmail.com>
#ifndef CGAL_MINKOWSKI_SUM_2_H

View File

@ -12,10 +12,7 @@
// 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) : Ron Wein <wein@post.tau.ac.il>
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_OFFSET_POLYGON_H
#define CGAL_OFFSET_POLYGON_H

View File

@ -1,2 +1 @@
Ron Wein <wein@post.tau.ac.il>
Efi Fogel <efif@post.tau.ac.il>