boost :: geometry :: union_ () принимает необязательный аргумент «стратегии», который описывается как «Любой тип, соответствующий концепции стратегии Union_».Мне интересно узнать, существует ли существующая стратегия, которая может помочь мне с конкретной проблемой, с которой я сталкиваюсь.Вот некоторый код:
using point_t = boost::geometry::model::d2::point_xy<double>;
using polygon_t = boost::geometry::model::polygon<point_t>;
using mpolygon_t = boost::geometry::model::multi_polygon<polygon_t>;
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& 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);
}
}
Я ожидаю, что вершины, являющиеся результатом объединения obstacle2
и obstacle3
, будут коллинеарны с соответствующим ребром obstacle2
.Я обнаружил, что они примерно на 1е-7 вылетели, что является большей ошибкой, чем я ожидал (в конце концов, базовый тип координат - double
).
Итак, есть ли стратегия?что я могу поставить, что уменьшит ошибку, которую я вижу?