这是我的代码片段。我正在尝试为顶点类对象 RTreeVertex 创建一个rtree树。
class Entity {
public:
int num;
public:
Entity(int nr): num(nr){ }
virtual ~Entity(){}
bool operator==(const Entity& b)
{
return num == b.num;
}
};
class Vertex : public Entity {
public :
struct Coord{
double X, Y, Z;
}Pos;
Vertex(int num=0, double X=0., double Y=0., double Z=0.): Entity (num)
{
Pos.X = X;
Pos.Y = Y;
Pos.Z = Z;
}
};
这是我声明rtree的方式:
#include <boost/geometry/index/rtree.hpp>
namespace bgi = boost::geometry::index;
bgi::rtree< Vertex, bgi::linear<32> > RTreeVertex;
但我收到一条错误消息,指出vertec不可索引。
还有一个更普遍的问题:使用rtree存储与网格相关的数据是一个好主意吗?
最佳答案
您必须将点类注册为Boost几何。它为您的类(class)创建了许多特征。我测试了它,它有效。
class Vertex : public Entity {
public :
double X, Y, Z;
Vertex(int num=0, double x=0., double y=0., double z=0.): Entity (num)
{
X = x;
Y = y;
Z = z;
}
};
BOOST_GEOMETRY_REGISTER_POINT_3D( Vertex, double, bg::cs::cartesian, X, X, X );
#include <boost/geometry/index/rtree.hpp>
namespace bgi = boost::geometry::index;
bgi::rtree< Vertex, bgi::linear<32> > RTreeVertex;
我无法在Pos::X ...的结构中将其与X,Y,Z一起使用,也许有办法。您可以加入boost.org上的几何组。他们是几何专家。
附录:
我很好奇,所以我看了一下REGISTER ..的工作原理。带有:
BOOST_GEOMETRY_REGISTER_POINT_3D( Vertex, double, bg::cs::cartesian, Pos.X, Pos.Y, Pos.Z );
您可以将结构用于x,y,z。
和 namespace bg = boost::geometry;
是我上面使用的 namespace
关于c++ - rtree是可索引的断言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36068844/