繁体   English   中英

使用增强几何体旋转多边形

[英]Rotate a polygon using boost geometry

我正在尝试使用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

我该怎么办?

多边形无效(请参阅文档)。 使用is_valid很容易检查。

如果您不知道输入源,可以尝试使用boost::geometry::correct

住在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM