2016-04-28 3 views
1

Я хотел бы вычислить точку пересечения между некоторым сегментом и полем. К сожалению, я не нашел такую ​​функцию в библиотеке boost. у меня есть что-то вроде этого:Поиск точки пересечения с использованием библиотеки boost

using boost::geometry; 
using Point = model::point<double, 3, cs::cartesian>; 
using Box = model::box<Point>; 
using Line = model::segment<Point>; 

index::rtree<Box, index::quadratic<16>> rtree; 

... 

//EDIT 
std::vector<std::vector<Point>> getIntersection(Line line){ 
    std::vector<Box> boxes; 

    rtree.query(index::intersects(line), std::back_inserter(boxes)); 

    std::vector<std::vector<Point>> result; 
    for(const auto&box: boxes){ 
     std::vector<Point> points; 
     intersection(line, box, points); // can't compile 
     result.push_back(points); 
    } 

    return result; 
} 

Так что вы видите в настоящее время я возвращаю все пересекались ящики, содержащиеся в rtree. Обнаружение пересечения работает отлично, но я также должен знать, где он находится. К сожалению, я не могу использовать вектор очков вообще. Ну, кто-нибудь знает, как получить этот момент?

EDIT:

Я добавил intersection функцию. Теперь, хотя я передаю интуитивно хорошие аргументы, он не компилируется. Похоже, нет никакого решения, потому что согласно данной функции ошибки для таких типов не реализовано.

ответ

0

Я думаю, что вы можете в дальнейшем использовать свои собранные коробки и найти точки пересечения с функцией:

template<typename Geometry1, typename Geometry2, typename GeometryOut> 
bool intersection(Geometry1 const & geometry1, 
        Geometry2 const & geometry2, 
        GeometryOut & geometry_out) 

Смотрите пример в Boost documentation

Смежные вопросы