rtree 是可索引的断言

rtree is indexable assertion

本文关键字:断言 索引 rtree      更新时间:2023-10-16

这是我的代码片段。我正在尝试为顶点类对象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;

但我收到一个错误,说顶点不可索引。

还有一个更普遍的问题:使用 rtree 来存储与网格相关的数据是个好主意吗?

您必须使用提升几何体注册点类。它为您的班级创造了一系列特征。我测试了这个,它有效。

    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 上加入几何组。他们是几何专家。

补遗:我很好奇,所以我看了如何注册..工程。跟:

BOOST_GEOMETRY_REGISTER_POINT_3D( Vertex, double, bg::cs::cartesian, Pos.X, Pos.Y, Pos.Z );

您可以将您的结构用于 x,y,z。

和命名空间 bg = boost::geometry;

是我上面使用的名称空间