В настоящее время я использую повышение 1.67 и обнаруживаю, что если я использую boost::geometry::within()
, чтобы проверить, находится ли точка в сегменте, я не получу ожидаемых ответов.Например, я могу построить пару отрезков, которые пересекаются, и использовать boost::geometry::intersection()
, чтобы получить точку пересечения.Я ожидаю, что эта точка будет в пределах каждого из краев.Однако это не всегда то, что я вижу.Вот код, демонстрирующий мою проблему:
#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
int main() {
using point_t = boost::geometry::model::d2::point_xy<double>;
using segment_t = boost::geometry::model::segment<point_t>;
segment_t e1{point_t{100, 350}, point_t{-100, 400}};
segment_t e2{point_t{0, 0}, point_t{90, 600}};
std::vector<point_t> iv;
boost::geometry::intersection(e1, e2, iv);
assert(iv.size() == 1);
const auto& v = iv[0];
bool is_within = boost::geometry::within(v, e1);
std::cout << "is within? " << is_within << std::endl;
is_within = boost::geometry::within(v, e2);
std::cout << "is within? " << is_within << std::endl;
return 0;
}
В этом случае within()
возвращает false для обоих ребер.