Sia tradurre e ruotare sono trasformazioni affini, cioè, possono essere rappresentati utilizzando una matrice. Pertanto, tutto ciò che devi fare è creare un nuovo trasformatore la cui matrice sia uguale al prodotto delle matrici delle due trasformate.
trans::ublas_transformer<point, point, 2, 2> translateRotate(prod(rotate.matrix(), translate.matrix()));
Ecco un esempio di lavoro 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;
}
essere molto attenti per quanto riguarda l'ordine delle matrici nella moltiplicazione. L'esempio sopra prima traduce, quindi ruota.
io non sono del tutto sicuro, ma non credo che possa essere ancora finito. Spero che qualcuno mi smentisca. – owagh