Мне нужно определить, пересекаются ли интерьеры двух геометрий. InteriorsIntersect предикат не определен ГОС или Boost, геометрии, а определяется матрицей DE-9IM (see also):Определенный пользователем пространственный предикат в пределах геометрии Boost
T * *
* * *
* * *
я создал свой собственный предикат, используя relate
функцию Boost, геометрии.
namespace bgr = boost::geometry::detail::relate;
using InteriorsIntersectMask = bgr::static_mask<'T','*','*','*','*','*','*','*','*'>;
template<typename Geom1, typename Geom2>
inline bool interiorsIntersect(const Geom1& geom1, const Geom2& geom2)
{
return bgr::relate<InteriorsIntersectMask>(geom1, geom2);
}
Это прекрасно работает. Моя единственная проблема заключается в том, что функция relate
и тип static_mask
не документированы как часть API геометрии Boost и являются деталями реализации, насколько я могу судить. Безопасно ли использовать relate
таким образом? Есть ли альтернатива достижению той же цели с использованием Boost Geometry? В идеале я бы хотел, чтобы relate
был алгоритмом в пределах boost/geometry/algorithms
.