관심있는 사람을위한 해결책입니다. 부스트 지오메트리는 실제로 부스트의 qvm::mat
을 매트릭스 변환에 사용하는 matrix_transformer이라는 전략을 추가했습니다. (회전 원점에 대한 것을 기억) 녹색 다각형 파란색 다각형 변환 원본과 내 결과,의 여기
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
using namespace boost::geometry::strategy::transform;
typedef boost::geometry::model::d2::point_xy<double> point_2f;
typedef boost::geometry::model::polygon<point_2f> polygon_2f;
int main() {
polygon_2f pol;
boost::geometry::read_wkt("POLYGON((10 10,10 27,24 22,22 10,10 10))", pol);
polygon_2f polTrans;
// Set the rotation angle (in radians)
double angleDeg = 45;
double angleRad = angleDeg * 3.14159/180.0;
vector<vector<double> > mat = {{cos(angleRad), sin(angleRad), 0}, {-sin(angleRad), cos(angleRad), 0}, {0, 0, 1}};
// Create the matrix_trasformer for a simple rotation matrix
matrix_transformer<double, 2, 2> rotation(mat[0][0], mat[0][1], mat[0][2], mat[1][0], mat[1][1], mat[1][2], mat[2][0], mat[2][1], mat[2][2]);
// Apply the matrix_transformer
boost::geometry::transform(pol, polTrans, rotation);
// Create svg file to show results
std::ofstream svg("transformationExample.svg");
boost::geometry::svg_mapper<point_2f> mapper(svg, 400, 400);
mapper.add(pol);
mapper.map(pol, "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(153,204,0);stroke-width:2");
mapper.add(polTrans);
mapper.map(polTrans, "fill-opacity:0.5;fill:rgb(153,204,255);stroke:rgb(153,204,255);stroke-width:2");
return 0;
}
: 그리고 많은 예제는 그래서 여기 내 코드입니다, 거기 밖으로 아니다
은
![enter image description here](https://i.stack.imgur.com/3DGdnm.png)
아니, 의외로 (?) – sehe
는 지오메트리 부스트 @sehe 행렬 연산을하지 않는 형상 라이브러리가 실제로 마법처럼 일'matrix_transformer'라는 전략을 가지고 –
내가 ... 그렇군요 (솔루션을 참조) . 나는'qvm'이 무엇을 가리키는 지 아무 단서도 없으며, 여러분의 코드에서도 그것을 보지 못하지만 부스트 라이브러리의 새로운면을 소개해 주셔서 감사합니다 :) – sehe