1

我有一个std::list2D 点,想测试一个点是否p位于向量给出的多边形内。我已经发现它boost::geometry有一个within测试这个的功能。不幸的是,我似乎以错误的方式使用它:

void someFunction(...) {
    namespace bpl = boost::polygon;
    typedef bpl::polygon_data<double> Polygon;
    typedef bpl::polygon_traits<Polygon>::point_type Point;

    Polygon polygon;
    std::vector<Point> points;

    for (std::list<MyPointType>::const_iterator it = myPolygonPoints.begin(); it != myPolygonPoints.end(); ++it) {
        points.push_back(Point(it->GetX(),it->GetY()));
    } 

    polygon.set(points.begin(),points.end());
    // ...
    if (!boost::geometry::within(Point(someX,someY),polygon)) {
        doSomething();
    }
    //...
}

我收到各种编译错误,从within. 那么构建多边形并使用它的正确方法是什么within

问候

4

2 回答 2

1

为什么不坚持使用示例中给出的类型?例如,请参阅此页面

typedef boost::geometry::model::d2::point_xy<double> Point;
typedef boost::geometry::model::polygon<Point> Polygon;

对我来说,它可以工作。

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
//...

Polygon poly;
//... construct the polygon

Point p(4, 1);

std::cout << "within: " << (boost::geometry::within(p, poly) ? "yes" : "no") << std::endl;
于 2013-08-13T13:03:26.520 回答
0

有一个来自http://www.boost.org/doc/libs/1_47_0/libs/geometry/doc/html/geometry/reference/algorithms/within/within_2.html的例子

根据您的意思,代码:

if (!boost::geometry::within(Point(someX,someY),polygon)) {
        doSomething();
}

应该:

Point point(someX,someY);
if (!boost::geometry::within(point,polygon)) {
        doSomething();
}

或者:

   Point *ppoint = new point(someX,someY);
   if (!boost::geometry::within(*ppoint,polygon)) {
            doSomething();
   }

因为在 C++ 中不允许直接调用构造函数 Point(someX,someY) 作为没有类实例化的函数。

于 2013-08-13T12:10:24.177 回答