【发布时间】:2017-06-26 11:32:29
【问题描述】:
我有一个 3D 点矩阵 (positions),其中每一列代表一个 3D 点,在特定时间实例的本地帧中表示。
transforms(行)向量包含移动局部坐标系在每个时刻的变换矩阵,即第i个变换矩阵对应positions的第i列。
我想通过将变换矩阵应用于它们的对应点来计算全局框架 (transformed) 中的位置。
这可以通过如下的 for 循环来完成:
Eigen::Matrix<Eigen::Isometry3d, 1, Eigen::Dynamic> transforms;
Eigen::Matrix<double, 3, Eigen::Dynamic> positions, transformed;
for (int i = 0; i < positions.cols(); ++i)
transformed.col(i) = transforms(i) * positions.col(i);
我想知道是否可以执行相同的操作来避免 for 循环。我尝试了以下两种方法,但它们给了我编译错误:
-
按列应用转换:
transformed = transforms.colwise() * positions.colwise ();错误:二进制表达式的操作数无效(
ColwiseReturnType(又名VectorwiseOp<Eigen::Matrix<Eigen::Transform<double, 3, 1, 0>, 1, -1, 1, 1, -1>, Vertical>)和ColwiseReturnType(又名VectorwiseOp<Eigen::Matrix<double, 3, -1, 0, 3, -1>, Vertical>)) -
使用数组应用转换:
transformed = transforms.array() * positions.array().colwise ();错误:二进制表达式的操作数无效(
ArrayWrapper<Eigen::Matrix<Eigen::Transform<double, 3, 1, 0>, 1, -1, 1, 1, -1> >和ColwiseReturnType(又名VectorwiseOp<Eigen::ArrayWrapper<Eigen::Matrix<double, 3, -1, 0, 3, -1> >, Vertical>))
问题:如何重写 for 循环以消除(显式)for 循环?
【问题讨论】: