mirror of https://github.com/CGAL/cgal
Cleaned up
This commit is contained in:
parent
3ecd5a3795
commit
1b0c1de7b3
|
|
@ -30,7 +30,7 @@
|
|||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
* Computes the Minkowski sum \f$ P \oplus Q\f$ of the two given polygons.
|
||||
* Computes the Minkowski sum \f$ P \oplus Q\f$ of two given polygons.
|
||||
* The function computes the reduced convolution of the two polygons and
|
||||
* extracts those loops of the convolution which are part of the Minkowsi
|
||||
* sum. This method works very efficiently, regardless of whether `P` and
|
||||
|
|
@ -38,10 +38,11 @@ namespace CGAL {
|
|||
* Note that as the input polygons may not be convex, their Minkowski
|
||||
* sum may not be a simple polygon. The result is therefore represented
|
||||
* as a polygon with holes.
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
* \pre Both `P` and `Q` are simple, counterclockwise-oriented polygons.
|
||||
*/
|
||||
|
||||
template <class Kernel_, class Container_>
|
||||
*/
|
||||
template <typename Kernel_, typename Container_>
|
||||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_reduced_convolution_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_2<Kernel_, Container_>& pgn2)
|
||||
|
|
@ -50,64 +51,107 @@ minkowski_sum_reduced_convolution_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
typedef Container_ Container;
|
||||
|
||||
Minkowski_sum_by_reduced_convolution_2<Kernel, Container> mink_sum;
|
||||
Polygon_2<Kernel,Container> sum_bound;
|
||||
std::list<Polygon_2<Kernel,Container> > sum_holes;
|
||||
Polygon_2<Kernel, Container> sum_bound;
|
||||
std::list<Polygon_2<Kernel, Container> > sum_holes;
|
||||
|
||||
if (pgn1.size() > pgn2.size())
|
||||
mink_sum (pgn1, pgn2, sum_bound, std::back_inserter(sum_holes));
|
||||
else
|
||||
mink_sum (pgn2, pgn1, sum_bound, std::back_inserter(sum_holes));
|
||||
mink_sum(pgn1, pgn2, sum_bound, std::back_inserter(sum_holes));
|
||||
else mink_sum(pgn2, pgn1, sum_bound, std::back_inserter(sum_holes));
|
||||
|
||||
return (Polygon_with_holes_2<Kernel,Container> (sum_bound,
|
||||
sum_holes.begin(),
|
||||
sum_holes.end()));
|
||||
return (Polygon_with_holes_2<Kernel,Container>(sum_bound,
|
||||
sum_holes.begin(),
|
||||
sum_holes.end()));
|
||||
}
|
||||
|
||||
/*!
|
||||
* Computes the Minkowski sum \f$ P \oplus Q\f$ of the two given
|
||||
* polygons-with-holes.
|
||||
* Computes the Minkowski sum \f$ P \oplus Q\f$ of two given polygons with
|
||||
* holes.
|
||||
* The function computes the reduced convolution of the two polygons and
|
||||
* extracts those loops of the convolution which are part of the Minkowsi
|
||||
* sum. This method works very efficiently, regardless of whether `P` and
|
||||
* `Q` are convex or non-convex.
|
||||
* The result is also represented as a polygon with holes.
|
||||
*/
|
||||
template <class Kernel_, class Container_>
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_>
|
||||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_reduced_convolution_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_with_holes_2<Kernel_, Container_>& pgn2)
|
||||
minkowski_sum_reduced_convolution_2
|
||||
(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_with_holes_2<Kernel_, Container_>& pgn2)
|
||||
{
|
||||
typedef Kernel_ Kernel;
|
||||
typedef Container_ Container;
|
||||
|
||||
Hole_filter_2<Kernel, Container> hole_filter;
|
||||
|
||||
Polygon_with_holes_2<Kernel,Container> filtered_pgn1;
|
||||
Polygon_with_holes_2<Kernel,Container> filtered_pgn2;
|
||||
Polygon_with_holes_2<Kernel, Container> filtered_pgn1;
|
||||
Polygon_with_holes_2<Kernel, Container> filtered_pgn2;
|
||||
|
||||
hole_filter(pgn1, pgn2, filtered_pgn1);
|
||||
hole_filter(pgn2, pgn1, filtered_pgn2);
|
||||
|
||||
Minkowski_sum_by_reduced_convolution_2<Kernel, Container> mink_sum;
|
||||
Polygon_2<Kernel,Container> sum_bound;
|
||||
std::list<Polygon_2<Kernel,Container> > sum_holes;
|
||||
Polygon_2<Kernel, Container> sum_bound;
|
||||
std::list<Polygon_2<Kernel, Container> > sum_holes;
|
||||
|
||||
mink_sum (filtered_pgn1, filtered_pgn2, sum_bound, std::back_inserter(sum_holes));
|
||||
mink_sum(filtered_pgn1, filtered_pgn2, sum_bound,
|
||||
std::back_inserter(sum_holes));
|
||||
|
||||
return (Polygon_with_holes_2<Kernel,Container> (sum_bound,
|
||||
sum_holes.begin(),
|
||||
sum_holes.end()));
|
||||
return (Polygon_with_holes_2<Kernel,Container>(sum_bound,
|
||||
sum_holes.begin(),
|
||||
sum_holes.end()));
|
||||
}
|
||||
|
||||
/*!
|
||||
* Computes the Minkowski sum \f$ P \oplus Q\f$ of a simple polygon and a
|
||||
* polygon with holes.
|
||||
* The function computes the reduced convolution of the two polygons and
|
||||
* extracts those loops of the convolution which are part of the Minkowsi
|
||||
* sum. This method works very efficiently, regardless of whether `P` and
|
||||
* `Q` are convex or non-convex.
|
||||
* The result is also represented as a polygon with holes.
|
||||
* \param[in] pgn1 The simple polygon.
|
||||
* \param[in] pgn2 The polygon with holes.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_>
|
||||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_reduced_convolution_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_with_holes_2<Kernel_, Container_>& pgn2)
|
||||
minkowski_sum_reduced_convolution_2
|
||||
(const Polygon_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_with_holes_2<Kernel_, Container_>& pgn2)
|
||||
{
|
||||
Polygon_with_holes_2<Kernel_, Container_> pgnwh1(pgn1);
|
||||
return minkowski_sum_reduced_convolution_2(pgnwh1, pgn2);
|
||||
typedef Kernel_ Kernel;
|
||||
typedef Container_ Container;
|
||||
|
||||
Hole_filter_2<Kernel, Container> hole_filter;
|
||||
Polygon_with_holes_2<Kernel, Container> filtered_pgn2;
|
||||
hole_filter(pgn2, pgn1, filtered_pgn2);
|
||||
Minkowski_sum_by_reduced_convolution_2<Kernel, Container> mink_sum;
|
||||
Polygon_2<Kernel, Container> sum_bound;
|
||||
std::list<Polygon_2<Kernel, Container> > sum_holes;
|
||||
mink_sum(pgn1, filtered_pgn2, sum_bound, std::back_inserter(sum_holes));
|
||||
return (Polygon_with_holes_2<Kernel,Container>(sum_bound,
|
||||
sum_holes.begin(),
|
||||
sum_holes.end()));
|
||||
}
|
||||
|
||||
/*!
|
||||
* Computes the Minkowski sum \f$ P \oplus Q\f$ of a simple polygon and a
|
||||
* polygon with holes.
|
||||
* The function computes the reduced convolution of the two polygons and
|
||||
* extracts those loops of the convolution which are part of the Minkowsi
|
||||
* sum. This method works very efficiently, regardless of whether `P` and
|
||||
* `Q` are convex or non-convex.
|
||||
* The result is also represented as a polygon with holes.
|
||||
* \param[in] pgn1 The polygon with holes.
|
||||
* \param[in] pgn2 The simple polygon.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_>
|
||||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_reduced_convolution_2
|
||||
(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_2<Kernel_, Container_>& pgn2)
|
||||
{ return minkowski_sum_reduced_convolution_2(pgn2, pgn1); }
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of two simple polygons using the (full)
|
||||
|
|
@ -115,11 +159,11 @@ minkowski_sum_reduced_convolution_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
* Note that as the input polygons may not be convex, their Minkowski sum may
|
||||
* not be a simple polygon. The result is therefore represented as a polygon
|
||||
* with holes.
|
||||
* \param pgn1 (in) The first polygon.
|
||||
* \param pgn2 (in) The second polygon.
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <class Kernel_, class Container_>
|
||||
template <typename Kernel_, typename Container_>
|
||||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_full_convolution_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_2<Kernel_, Container_>& pgn2)
|
||||
|
|
@ -133,8 +177,7 @@ minkowski_sum_full_convolution_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
|
||||
if (pgn1.size() > pgn2.size())
|
||||
mink_sum(pgn1, pgn2, sum_bound, std::back_inserter(sum_holes));
|
||||
else
|
||||
mink_sum(pgn2, pgn1, sum_bound, std::back_inserter(sum_holes));
|
||||
else mink_sum(pgn2, pgn1, sum_bound, std::back_inserter(sum_holes));
|
||||
return (Polygon_with_holes_2<Kernel, Container>(sum_bound,
|
||||
sum_holes.begin(),
|
||||
sum_holes.end()));
|
||||
|
|
@ -147,8 +190,8 @@ minkowski_sum_full_convolution_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
* Note that as the input polygons may not be convex, their Minkowski sum may
|
||||
* not be a simple polygon. The result is therefore represented as a polygon
|
||||
* with holes.
|
||||
* \param pgn1 (in) The first polygon.
|
||||
* \param pgn2 (in) The second polygon.
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*
|
||||
* \sa `CGAL::minkowski_sum_reduced_convolution_2()`
|
||||
|
|
@ -158,9 +201,7 @@ template <typename Kernel_, typename Container_>
|
|||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_2<Kernel_, Container_>& pgn2)
|
||||
{
|
||||
return minkowski_sum_reduced_convolution_2(pgn1, pgn2);
|
||||
}
|
||||
{ return minkowski_sum_reduced_convolution_2(pgn1, pgn2); }
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of two polygons with holes using the convolution
|
||||
|
|
@ -168,8 +209,8 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
* as it is more efficient in most cases.
|
||||
* Note that the result may not be a simple polygon. The result is therefore
|
||||
* represented as a polygon with holes.
|
||||
* \param pgn1 (in) The first polygon with holes.
|
||||
* \param pgn2 (in) The second polygon with holes.
|
||||
* \param[in] pgn1 The first polygon with holes.
|
||||
* \param[in] pgn2 The second polygon with holes.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*
|
||||
* \sa `CGAL::minkowski_sum_reduced_convolution_2()`
|
||||
|
|
@ -179,18 +220,16 @@ template <typename Kernel_, typename Container_>
|
|||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_with_holes_2<Kernel_, Container_>& pgn2)
|
||||
{
|
||||
return minkowski_sum_reduced_convolution_2(pgn1, pgn2);
|
||||
}
|
||||
{ return minkowski_sum_reduced_convolution_2(pgn1, pgn2); }
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of a simple polygons and a polygon-with-holes
|
||||
* Compute the Minkowski sum of a simple polygon and a polygon with holes
|
||||
* using the convolution method. This function defaults to calling the reduced
|
||||
* convolution method, as it is more efficient in most cases.
|
||||
* Note that the result may not be a simple polygon. The result is therefore
|
||||
* represented as a polygon with holes.
|
||||
* \param pgn1 (in) The polygon.
|
||||
* \param pgn2 (in) The polygon with holes.
|
||||
* \param[in] pgn1 The simple polygon.
|
||||
* \param[in] pgn2 The polygon with holes.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*
|
||||
* \sa `CGAL::minkowski_sum_reduced_convolution_2()`
|
||||
|
|
@ -200,10 +239,26 @@ template <typename Kernel_, typename Container_>
|
|||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_with_holes_2<Kernel_, Container_>& pgn2)
|
||||
{
|
||||
Polygon_with_holes_2<Kernel_, Container_> pgnwh1(pgn1);
|
||||
return minkowski_sum_reduced_convolution_2(pgnwh1, pgn2);
|
||||
}
|
||||
{ return minkowski_sum_reduced_convolution_2(pgn1, pgn2); }
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of a simple polygon and a polygon with holes
|
||||
* using the convolution method. This function defaults to calling the reduced
|
||||
* convolution method, as it is more efficient in most cases.
|
||||
* Note that the result may not be a simple polygon. The result is therefore
|
||||
* represented as a polygon with holes.
|
||||
* \param[in] pgn1 The polygon with holes.
|
||||
* \param[in] pgn2 The simple polygon.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*
|
||||
* \sa `CGAL::minkowski_sum_reduced_convolution_2()`
|
||||
* \sa `CGAL::minkowski_sum_full_convolution_2()`
|
||||
*/
|
||||
template <typename Kernel_, typename Container_>
|
||||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_2<Kernel_, Container_>& pgn2)
|
||||
{ return minkowski_sum_reduced_convolution_2(pgn1, pgn2); }
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of two simple polygons by decomposing each
|
||||
|
|
@ -212,9 +267,9 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
* Note that as the input polygons may not be convex, their Minkowski sum may
|
||||
* not be a simple polygon. The result is therefore represented as a polygon
|
||||
* with holes.
|
||||
* \param pgn1 (in) The first polygon.
|
||||
* \param pgn2 (in) The second polygon.
|
||||
* \param decomposition_strategy (in) A functor for decomposing polygons.
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
* \param[in] decomposition_strategy A functor for decomposing polygons.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_,
|
||||
|
|
@ -236,10 +291,10 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
* Note that as the input polygons may not be convex, their Minkowski sum may
|
||||
* not be a simple polygon. The result is therefore represented as a polygon
|
||||
* with holes.
|
||||
* \param pgn1 (in) The first polygon.
|
||||
* \param pgn2 (in) The second polygon.
|
||||
* \param decomposition_strategy (in) A functor for decomposing polygons.
|
||||
* \param traits (in) traits The traits.
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
* \param[in] decomposition_strategy A functor for decomposing polygons.
|
||||
* \param[in] traits The traits.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_,
|
||||
|
|
@ -258,18 +313,17 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
|
||||
Minkowski_sum_by_decomposition_2<Decomposition_strategy, Container>
|
||||
mink_sum(decomposition_strategy, traits);
|
||||
Polygon_with_holes_2<Kernel, Container> sum = mink_sum(pgn1, pgn2);
|
||||
return (sum);
|
||||
return mink_sum(pgn1, pgn2);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of two polygon-with-holes by decomposing each
|
||||
* Compute the Minkowski sum of two polygon with holes by decomposing each
|
||||
* polygon to convex sub-polygons and computing the union of the pairwise
|
||||
* Minkowski sums of the sub-polygons.
|
||||
* The result is also represented as a polygon with holes.
|
||||
* \param pgn1 (in) The first polygon.
|
||||
* \param pgn2 (in) The second polygon.
|
||||
* \param decomposition_strategy (in) A functor for decomposing polygons.
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
* \param[in] decomposition_strategy A functor for decomposing polygons.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_,
|
||||
|
|
@ -281,27 +335,18 @@ minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
|||
{
|
||||
typename Minkowski_sum_by_decomposition_2<DecompositionStrategy_,
|
||||
Container_>::Traits_2 traits;
|
||||
|
||||
Hole_filter_2<Kernel_, Container_> hole_filter;
|
||||
|
||||
Polygon_with_holes_2<Kernel_,Container_> filtered_pgn1;
|
||||
Polygon_with_holes_2<Kernel_,Container_> filtered_pgn2;
|
||||
|
||||
hole_filter(pgn1, pgn2, filtered_pgn1);
|
||||
hole_filter(pgn2, pgn1, filtered_pgn2);
|
||||
|
||||
return minkowski_sum_2(filtered_pgn1, filtered_pgn2, decomposition_strategy, traits);
|
||||
return minkowski_sum_2(pgn1, pgn2, decomposition_strategy, traits);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of two polygon-with-holes by decomposing each
|
||||
* Compute the Minkowski sum of two polygon with holes by decomposing each
|
||||
* polygon to convex sub-polygons and computing the union of the pairwise
|
||||
* Minkowski sums of the sub-polygons.
|
||||
* The result is also represented as a polygon with holes.
|
||||
* \param pgn1 (in) The first polygon.
|
||||
* \param pgn2 (in) The second polygon.
|
||||
* \param decomposition_strategy (in) A functor for decomposing polygons.
|
||||
* \param traits (in) The traits.
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
* \param[in] decomposition_strategy A functor for decomposing polygons.
|
||||
* \param[in] traits The traits.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_,
|
||||
|
|
@ -320,27 +365,22 @@ minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
|||
|
||||
Minkowski_sum_by_decomposition_2<Decomposition_strategy, Container>
|
||||
mink_sum(decomposition_strategy, traits);
|
||||
|
||||
Hole_filter_2<Kernel_, Container_> hole_filter;
|
||||
|
||||
Polygon_with_holes_2<Kernel_,Container_> filtered_pgn1;
|
||||
Polygon_with_holes_2<Kernel_,Container_> filtered_pgn2;
|
||||
|
||||
Hole_filter_2<Kernel, Container> hole_filter;
|
||||
Polygon_with_holes_2<Kernel,Container> filtered_pgn1;
|
||||
Polygon_with_holes_2<Kernel,Container> filtered_pgn2;
|
||||
hole_filter(pgn1, pgn2, filtered_pgn1);
|
||||
hole_filter(pgn2, pgn1, filtered_pgn2);
|
||||
|
||||
Polygon_with_holes_2<Kernel, Container> sum = mink_sum(filtered_pgn1, filtered_pgn2);
|
||||
return sum;
|
||||
return mink_sum(filtered_pgn1, filtered_pgn2);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of one simple polygon and one polygon-with-holes
|
||||
* Compute the Minkowski sum of a simple polygon and a polygon with holes
|
||||
* by decomposing each polygon to convex sub-polygons and computing the union
|
||||
* of the pairwise Minkowski sums of the sub-polygons. The result is also
|
||||
* represented as a polygon with holes.
|
||||
* \param pgn1 (in) The first polygon.
|
||||
* \param pgn2 (in)The second polygon.
|
||||
* \param decomposition_strategy (in) A functor for decomposing polygons.
|
||||
* \param[in] pgn1 The first polygon.
|
||||
* \param[in] pgn2 The second polygon.
|
||||
* \param[in] decomposition_strategy A functor for decomposing polygons.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_,
|
||||
|
|
@ -352,27 +392,18 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
{
|
||||
typename Minkowski_sum_by_decomposition_2<DecompositionStrategy_,
|
||||
Container_>::Traits_2 traits;
|
||||
|
||||
Hole_filter_2<Kernel_, Container_> hole_filter;
|
||||
|
||||
Polygon_with_holes_2<Kernel_,Container_> filtered_pgn1;
|
||||
Polygon_with_holes_2<Kernel_,Container_> filtered_pgn2;
|
||||
|
||||
hole_filter(pgn1, pgn2, filtered_pgn1);
|
||||
hole_filter(pgn2, pgn1, filtered_pgn2);
|
||||
|
||||
return minkowski_sum_2(filtered_pgn1, filtered_pgn2, decomposition_strategy, traits);
|
||||
return minkowski_sum_2(pgn1, pgn2, decomposition_strategy, traits);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of one simple polygon and one polygon-with-holes
|
||||
* Compute the Minkowski sum of a simple polygon and a polygon with holes
|
||||
* by decomposing each polygon to convex sub-polygons and computing the union
|
||||
* of the pairwise Minkowski sums of the sub-polygons. The result is also
|
||||
* represented as a polygon with holes.
|
||||
* \param pgn1 (in) The first polygon.
|
||||
* \param pgn2 (in)The second polygon.
|
||||
* \param decomposition_strategy (in) A functor for decomposing polygons.
|
||||
* \param traits (in) The traits.
|
||||
* \param[in] pgn1 The simple polygon.
|
||||
* \param[in] pgn2 The polygon with holes.
|
||||
* \param[in] decomposition_strategy A functor for decomposing polygons.
|
||||
* \param[in] traits The traits.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_,
|
||||
|
|
@ -391,19 +422,56 @@ minkowski_sum_2(const Polygon_2<Kernel_, Container_>& pgn1,
|
|||
|
||||
Minkowski_sum_by_decomposition_2<Decomposition_strategy, Container>
|
||||
mink_sum(decomposition_strategy, traits);
|
||||
|
||||
Hole_filter_2<Kernel_, Container_> hole_filter;
|
||||
|
||||
Polygon_with_holes_2<Kernel_,Container_> filtered_pgn1;
|
||||
Polygon_with_holes_2<Kernel_,Container_> filtered_pgn2;
|
||||
|
||||
hole_filter(pgn1, pgn2, filtered_pgn1);
|
||||
Hole_filter_2<Kernel, Container> hole_filter;
|
||||
Polygon_with_holes_2<Kernel,Container> filtered_pgn2;
|
||||
hole_filter(pgn2, pgn1, filtered_pgn2);
|
||||
|
||||
Polygon_with_holes_2<Kernel, Container> sum = mink_sum(filtered_pgn1, filtered_pgn2);
|
||||
return sum;
|
||||
return mink_sum(pgn1, filtered_pgn2);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of a simple polygon and a polygon with holes
|
||||
* by decomposing each polygon to convex sub-polygons and computing the union
|
||||
* of the pairwise Minkowski sums of the sub-polygons. The result is also
|
||||
* represented as a polygon with holes.
|
||||
* \param[in] pgn1 The second polygon.
|
||||
* \param[in] pgn2 The first polygon.
|
||||
* \param[in] decomposition_strategy A functor for decomposing polygons.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_,
|
||||
typename DecompositionStrategy_>
|
||||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_2<Kernel_, Container_>& pgn2,
|
||||
const DecompositionStrategy_& decomposition_strategy)
|
||||
{
|
||||
typename Minkowski_sum_by_decomposition_2<DecompositionStrategy_,
|
||||
Container_>::Traits_2 traits;
|
||||
return minkowski_sum_2(pgn1, pgn2, decomposition_strategy, traits);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Compute the Minkowski sum of a simple polygon and a polygon with holes
|
||||
* by decomposing each polygon to convex sub-polygons and computing the union
|
||||
* of the pairwise Minkowski sums of the sub-polygons. The result is also
|
||||
* represented as a polygon with holes.
|
||||
* \param[in] pgn1 The polygon with holes.
|
||||
* \param[in] pgn2 The simple polygon.
|
||||
* \param[in] decomposition_strategy A functor for decomposing polygons.
|
||||
* \param[in] traits The traits.
|
||||
* \return The resulting polygon with holes, representing the sum.
|
||||
*/
|
||||
template <typename Kernel_, typename Container_,
|
||||
typename DecompositionStrategy_>
|
||||
Polygon_with_holes_2<Kernel_, Container_>
|
||||
minkowski_sum_2(const Polygon_with_holes_2<Kernel_, Container_>& pgn1,
|
||||
const Polygon_2<Kernel_, Container_>& pgn2,
|
||||
const DecompositionStrategy_& decomposition_strategy,
|
||||
const typename
|
||||
Minkowski_sum_by_decomposition_2<DecompositionStrategy_,
|
||||
Container_>::Traits_2& traits)
|
||||
{ return minkowski_sum_2(pgn2, pgn1, decomposition_strategy, traits); }
|
||||
|
||||
} //namespace CGAL
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue