Untitled
unknown
plain_text
2 years ago
2.7 kB
4
Indexable
cpp #include <iostream> #include <vector> #include <boost/geometry.hpp> #include <boost/geometry/index/rtree.hpp> namespace bg = boost::geometry; namespace bgi = boost::geometry::index; // Custom Point class representing the four points of the rectangle class MyPoint { public: MyPoint(float x1, float x2, float x3, float x4) : x1_(x1), x2_(x2), x3_(x3), x4_(x4) {} float getX1() const { return x1_; } float getX2() const { return x2_; } float getX3() const { return x3_; } float getX4() const { return x4_; } private: float x1_; float x2_; float x3_; float x4_; }; // Custom geometric traits for the MyPoint class namespace boost { namespace geometry { namespace traits { template <> struct tag<MyPoint> { using type = point_tag; }; template <> struct coordinate_type<MyPoint> { using type = float; }; template <> struct coordinate_system<MyPoint> { using type = cs::cartesian; }; template <> struct dimension<MyPoint> : boost::mpl::int_<4> {}; template <> struct access<MyPoint, 0> { static float get(const MyPoint& point) { return point.getX1(); } static void set(MyPoint& point, const float& value) { point.x1_ = value; } }; template <> struct access<MyPoint, 1> { static float get(const MyPoint& point) { return point.getX2(); } static void set(MyPoint& point, const float& value) { point.x2_ = value; } }; template <> struct access<MyPoint, 2> { static float get(const MyPoint& point) { return point.getX3(); } static void set(MyPoint& point, const float& value) { point.x3_ = value; } }; template <> struct access<MyPoint, 3> { static float get(const MyPoint& point) { return point.getX4(); } static void set(MyPoint& point, const float& value) { point.x4_ = value; } }; }}} // namespace boost::geometry::traits // Define the rtree type with custom point type typedef bgi::rtree<MyPoint, bgi::linear<16>> RTree; int main() { // Create an empty rtree RTree rtree; // Insert some rectangles into the tree rtree.insert(MyPoint(1.0, 2.0, 3.0, 4.0)); rtree.insert(MyPoint(5.0, 6.0, 7.0, 8.0)); rtree.insert(MyPoint(9.0, 10.0, 11.0, 12.0)); // Define a query rectangle MyPoint queryRectangle(2.0, 3.0, 4.0, 5.0); // Perform the intersection search std::vector<MyPoint> result; rtree.query(bgi::intersects(queryRectangle), std::back_inserter(result)); // Print the matching rectangles std::cout << "Rectangles intersecting with the query rectangle:" << std::endl; for (const auto& point : result) { std::cout << "(" << point.getX1() << ", " << point.getX2() << ", " << point.getX3() << ", " << point.getX4() << ")" << std::endl; } return 0; }
Editor is loading...