bool test_recursive_boxes(MultiPolygon& result, int& index, Generator& generator, int level, bool triangular, p_q_settings const& settings) { MultiPolygon p, q; // Generate two boxes if (level == 0) { p.resize(1); q.resize(1); make_polygon(p.front(), generator, triangular); make_polygon(q.front(), generator, triangular); bg::correct(p); bg::correct(q); } else { bg::correct(p); bg::correct(q); if (! test_recursive_boxes(p, index, generator, level - 1, triangular, settings) || ! test_recursive_boxes(q, index, generator, level - 1, triangular, settings)) { return false; } } typedef typename boost::range_value<MultiPolygon>::type polygon; std::ostringstream out; out << "recursive_box_" << index++ << "_" << level; if (! test_overlay_p_q < polygon, typename bg::coordinate_type<MultiPolygon>::type >(out.str(), p, q, settings)) { return false; } MultiPolygon mp; bg::detail::union_::union_insert < polygon >(p, q, std::back_inserter(mp)); bg::unique(mp); bg::simplify(mp, result, 0.01); bg::correct(mp); return true; }
void test_intersects(int count_x, int count_y, int width_x, p_q_settings const& settings) { MultiPolygon mp; make_polygon(mp, count_x, count_y, 0, width_x); bool const b = bg::intersects(mp); if (b) { std::cout << " YES"; } if(settings.svg) { typedef typename bg::coordinate_type<MultiPolygon>::type coordinate_type; typedef typename bg::point_type<MultiPolygon>::type point_type; std::ostringstream filename; filename << "intersects_" << string_from_type<coordinate_type>::name() << ".svg"; std::ofstream svg(filename.str().c_str()); bg::svg_mapper<point_type> mapper(svg, 500, 500); mapper.add(mp); mapper.map(mp, "fill-opacity:0.5;fill:rgb(153,204,0);" "stroke:rgb(153,204,0);stroke-width:3"); } }