translate 및 rotate는 모두 affine 변환입니다. 즉, 행렬을 사용하여 표현할 수 있습니다. 따라서 행렬이 두 변환의 행렬의 곱과 동일한 새 변압기를 만드는 것뿐입니다.
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/strategies/transform/matrix_transformers.hpp>
namespace bg = boost::geometry;
namespace trans = bg::strategy::transform;
typedef bg::model::d2::point_xy<double> point;
int main()
{
trans::translate_transformer<point, point> translate(0, 1);
trans::rotate_transformer<point, point, bg::degree> rotate(90);
trans::ublas_transformer<point, point, 2, 2> translateRotate(prod(rotate.matrix(), translate.matrix()));
point p;
translateRotate.apply(point(0, 0), p);
std::cout << bg::get<0>(p) << " " << bg::get<1>(p) << std::endl;
}
는 곱셈의 행렬의 순서에 관한 매우주의 수 :
trans::ublas_transformer<point, point, 2, 2> translateRotate(prod(rotate.matrix(), translate.matrix()));
여기에 전체 작업 예이다. 위의 예는 먼저 번역 된 다음 회전합니다.
나는 완전히 확신 할 수는 없지만 아직 할 수 없다고 생각합니다. 누군가가 나를 틀리게 증명하기를 바랍니다. – owagh