gpt4 book ai didi

c++ - 如何组合两个 Boost Geometry 变压器?

转载 作者:可可西里 更新时间:2023-11-01 16:38:56 28 4
gpt4 key购买 nike

我有两个变压器,平移和旋转如下:

namespace bg = boost::geometry;
namespace trans = bg::strategy::transform;

trans::translate_transformer<point, point> translate(px, py);
trans::rotate_transformer<point, point, bg::radian> rotate(rz);

如何将它们合并为一个,这样我就不必每次都调用两次 bg::transform 并使用中间变量?

最佳答案

平移和旋转都是仿射变换,即可以用矩阵表示。因此,您所要做的就是创建一个新的更改器(mutator),其矩阵等于两个变换的矩阵的乘积。

trans::ublas_transformer<point, point, 2, 2> translateRotate(prod(rotate.matrix(), translate.matrix()));

这是一个完整的工作示例:

#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;
}

非常注意乘法中矩阵的顺序。上面的示例先平移,然后旋转。

关于c++ - 如何组合两个 Boost Geometry 变压器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9691482/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com