[英]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
:
#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.