title: Strategies to use with boost::geometry::union_
body: <p>boost::geometry::union_() takes an optional "strategy" argument, which is described as "Any type fulfilling a Union_ Strategy Concept". I'm interested in learning if there's an existing strategy that can help me with a particular problem I'm having. Here's some code:</p>
  
  <pre><code>using point_t = boost::geometry::model::d2::point_xy&lt;double&gt;;
  using polygon_t = boost::geometry::model::polygon&lt;point_t&gt;;
  using mpolygon_t = boost::geometry::model::multi_polygon&lt;polygon_t&gt;;
  
  polygon_t obstacle1{{{-2, 7},
                       {2, 7},
                       {2, 3},
                       {-2, 3},
                       {-2, 7}}};
  
  polygon_t obstacle2{{{-2.8284271247461903, 5},
                       {0, 7.82842712474619},
                       {2.8284271247461903, 5},
                       {0, 2.1715728752538097},
                       {-2.8284271247461903, 5}}};
  
  polygon_t obstacle3{{{0.75, 3.0},
                       {0.75, 2.4215728752538097},
                       {0.2, 2.4215728752538097},
                       {0.75, 3.0}}};
  mpolygon_t obstacles{obstacle1, obstacle2, obstacle3};
  
  mpolygon_t consolidated;
  for (auto const&amp; obstacle : obstacles) {
      if (boost::geometry::overlaps(obstacle, consolidated)) {
          mpolygon_t temp;
          boost::geometry::union_(obstacle, consolidated, temp);
          consolidated = std::move(temp);
      } else {
          consolidated.push_back(obstacle);
      }
  }
  </code></pre>
  
  <p>I would expect that the vertices resulting from the union of <code>obstacle2</code> and <code>obstacle3</code> would be collinear with the appropriate edge of <code>obstacle2</code>. I'm finding that they're around 1e-7 off, which is a bigger error than I'd expect (the underlying coordinate type is <code>double</code>, after all).</p>
  
  <p>So, is there a strategy that I can supply which will reduce the error I'm seeing?</p>