【问题标题】:Rotate a polygon using boost geometry使用增强几何旋转多边形
【发布时间】:2015-06-28 10:06:31
【问题描述】:

我正在尝试使用 boost 几何来旋转多边形。可能我做错了什么。 我有一个多边形,不以原点为中心,声明如下:

Polygon _poly;
Polygon _poly2;

  Point2D A(4,3);
  Point2D B(4,5);
  Point2D C(6,5);
  Point2D D(6,3);
  Point2D CLOSE(4,3);


  _poly.outer().push_back(A);
  _poly.outer().push_back(B);
  _poly.outer().push_back(C);
  _poly.outer().push_back(D);

然后,我执行旋转:

  boost::geometry::strategy::transform::rotate_transformer<boost::geometry::degree, double, 2, 2> rotate(45.0);

但是得到的多边形坐标不是正确的:

poly 的坐标: 4 3 4 5 6 5 6 3

旋转坐标: 4 0 6 0 7 0 6 -2

我必须做什么?

【问题讨论】:

    标签: c++ boost rotation boost-geometry


    【解决方案1】:

    您的多边形无效(请参阅文档)。这很容易通过is_valid 进行检查。

    如果不知道输入源,可以随时尝试用boost::geometry::correct纠正:

    Live On Coliru

    #include <iostream>
    
    #include <boost/geometry/geometry.hpp>
    #include <boost/geometry/geometries/geometries.hpp>
    #include <boost/geometry/geometries/point.hpp>
    #include <boost/geometry/algorithms/is_valid.hpp>
    #include <boost/geometry/algorithms/transform.hpp>
    
    namespace bg  = boost::geometry;
    
    typedef bg::model::point<double, 2, bg::cs::cartesian> Point2D;
    typedef bg::model::polygon<Point2D> Polygon;
    //typedef bg::model::box<Point2D> box;
    
    int main() {
    
        Polygon _poly;
        Polygon _poly2;
    
        Point2D A(4,3);
        Point2D B(4,5);
        Point2D C(6,5);
        Point2D D(6,3);
        Point2D CLOSE(4,3);
    
        _poly.outer().push_back(A);
        _poly.outer().push_back(B);
        _poly.outer().push_back(C);
        _poly.outer().push_back(D);
    
        std::cout << std::boolalpha << bg::is_valid(_poly) << "\n";
        bg::correct(_poly);
        std::cout << std::boolalpha << bg::is_valid(_poly) << "\n";
    }
    

    输出:

    false
    true
    

    在这种情况下,您显然忘记添加CLOSE

    【讨论】:

    • 非常感谢,是的,我忘记了 CLOSE 点,因为多边形不是以原点为中心
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    相关资源
    最近更新 更多