Tanto la traducción como la rotación son transformaciones afines, es decir, se pueden representar utilizando una matriz. Por lo tanto, todo lo que tienes que hacer es crear un nuevo transformador cuya matriz sea igual al producto de las matrices de las dos transformadas.
trans::ublas_transformer<point, point, 2, 2> translateRotate(prod(rotate.matrix(), translate.matrix()));
Aquí es un ejemplo de trabajo completo:
#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;
}
Sé muy cuidado con respecto a la orden de las matrices en la multiplicación. El ejemplo anterior primero se traduce y luego gira.
No estoy del todo seguro, pero no creo que se pueda hacer todavía. Espero que alguien me demuestre que estoy equivocado. – owagh