| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 | // Boost.Polygon library voronoi.hpp header file//          Copyright Andrii Sydorchuk 2010-2012.// Distributed under the Boost Software License, Version 1.0.//    (See accompanying file LICENSE_1_0.txt or copy at//          http://www.boost.org/LICENSE_1_0.txt)// See http://www.boost.org for updates, documentation, and revision history.#ifndef BOOST_POLYGON_VORONOI#define BOOST_POLYGON_VORONOI#include "isotropy.hpp"#include "point_concept.hpp"#include "segment_concept.hpp"#include "voronoi_builder.hpp"#include "voronoi_diagram.hpp"// Public methods to compute Voronoi diagram of a set of points and segments.// Coordinates of the points and of the endpoints of the segments should belong// to the 32-bit signed integer range [-2^31, 2^31-1]. To use wider input// coordinate range voronoi_builder configuration via coordinate type traits// is required.// Complexity - O(N*logN), memory usage - O(N), N - number of input objects.namespace boost {namespace polygon {template <typename Point, typename VB>typename enable_if<  typename gtl_if<    typename is_point_concept<      typename geometry_concept<Point>::type    >::type  >::type,  std::size_t>::type insert(const Point& point, VB* vb) {  return vb->insert_point(x(point), y(point));}template <typename PointIterator, typename VB>typename enable_if<  typename gtl_if<    typename is_point_concept<      typename geometry_concept<        typename std::iterator_traits<PointIterator>::value_type      >::type    >::type  >::type,  void>::type insert(const PointIterator first, const PointIterator last, VB* vb) {  for (PointIterator it = first; it != last; ++it) {    insert(*it, vb);  }}template <typename Segment, typename VB>typename enable_if<  typename gtl_if<    typename is_segment_concept<      typename geometry_concept<Segment>::type    >::type  >::type,  std::size_t>::type insert(const Segment& segment, VB* vb) {  return vb->insert_segment(      x(low(segment)), y(low(segment)),      x(high(segment)), y(high(segment)));}template <typename SegmentIterator, typename VB>typename enable_if<  typename gtl_if<    typename is_segment_concept<      typename geometry_concept<        typename std::iterator_traits<SegmentIterator>::value_type      >::type    >::type  >::type,  void>::type insert(const SegmentIterator first,               const SegmentIterator last,               VB* vb) {  for (SegmentIterator it = first; it != last; ++it) {    insert(*it, vb);  }}template <typename PointIterator, typename VD>typename enable_if<  typename gtl_if<    typename is_point_concept<      typename geometry_concept<        typename std::iterator_traits<PointIterator>::value_type      >::type    >::type  >::type,  void>::type construct_voronoi(const PointIterator first,                          const PointIterator last,                          VD* vd) {  default_voronoi_builder builder;  insert(first, last, &builder);  builder.construct(vd);}template <typename SegmentIterator, typename VD>typename enable_if<  typename gtl_if<    typename is_segment_concept<      typename geometry_concept<        typename std::iterator_traits<SegmentIterator>::value_type      >::type    >::type  >::type,  void>::type construct_voronoi(const SegmentIterator first,                          const SegmentIterator last,                          VD* vd) {  default_voronoi_builder builder;  insert(first, last, &builder);  builder.construct(vd);}template <typename PointIterator, typename SegmentIterator, typename VD>typename enable_if<  typename gtl_and<    typename gtl_if<      typename is_point_concept<        typename geometry_concept<          typename std::iterator_traits<PointIterator>::value_type        >::type      >::type    >::type,    typename gtl_if<      typename is_segment_concept<        typename geometry_concept<          typename std::iterator_traits<SegmentIterator>::value_type        >::type      >::type    >::type  >::type,  void>::type construct_voronoi(const PointIterator p_first,                          const PointIterator p_last,                          const SegmentIterator s_first,                          const SegmentIterator s_last,                          VD* vd) {  default_voronoi_builder builder;  insert(p_first, p_last, &builder);  insert(s_first, s_last, &builder);  builder.construct(vd);}}  // polygon}  // boost#endif  // BOOST_POLYGON_VORONOI
 |