我正在使用boost库来检查使用within函数的多边形点。
我正在使用boost网站提供的代码示例进行测试。我想改变策略类型。
文档说“如果一个点正好位于几何的边界上,结果取决于策略。默认策略(绕组(坐标系不可知))在这种情况下返回false。”
我希望在边界上考虑点数。我应该使用哪种策略? 如何添加策略类型?
我尝试使用franklin策略类型进行测试但无法添加它,下面的代码会出现此错误:
错误C2039:'get':不是'boost :: geometry :: core_dispatch :: access,double,1,boost :: integral_constant>'
的成员
#include <iostream>
#include <list>
#include <string>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp>
int main()
{
typedef boost::geometry::model::d2::point_xy<double> point_type;
typedef boost::geometry::model::polygon<point_type> polygon_type;
typedef boost::geometry::model::segment<point_type> seg;
typedef boost::geometry::strategy::within::franklin<point_type, seg, void> fran;
std::string str;
fran fran_;
polygon_type poly;
boost::geometry::read_wkt("POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7)(2 1.3)(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", poly);
point_type p(4, 1);
std::cout << "within: " << (boost::geometry::within(p, poly,fran_) ? "yes" : "no") << std::endl;
system("pause");
return 0;
}