繁体   English   中英

在本征中显示仿射变换

[英]Displaying an affine transformation in Eigen

我正在尝试做一些简单的事情:

std::cout << e << std::endl;  

其中eEigen::Affine3d类型。 但是,我收到了无用的错误消息,例如:

cannot bind 'std::ostream {aka std::basic_ostream<char>}'   
lvalue to 'std::basic_ostream<char>&&'

原因在这里很有帮助,但答案不适用。

官方文档是草率的,仅暗示Affine3d和Affine3f对象是矩阵。 本征矩阵和向量可以通过std::cout打印,但不会出现问题。 那是什么问题呢?

令人讨厌的是,没有为Affine对象定义<<操作符。 您必须调用matrix()函数来获取可打印的表示形式:

std::cout << e.matrix() << std::endl;

如果您不喜欢均质矩阵:

Eigen::Matrix3d m = e.rotation();
Eigen::Vector3d v = e.translation();
std::cout << "Rotation: " << std::endl << m << std::endl;
std::cout << "Translation: " << std::endl << v << std::endl;

希望有人可以节省几分钟的烦恼。

PS: 另一个孤独的SO问题顺便提到了此解决方案。

老实说,我宁愿重载流运算符。 这使得重复使用更加方便。 你可以这样做

std::ostream& operator<<(std::ostream& stream, const Eigen::Affine3d& affine)
{
    stream << "Rotation: " << std::endl << affine.rotation() << std::endl;
    stream << "Translation: " << std::endl <<  affine.translation() << std::endl;

    return stream;
}

int main()
{

    Eigen::Affine3d l;

    std::cout << l << std::endl;

    return 0;
}

请注意,l是未初始化的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM