我的目标是通过在3向量的末尾附加0来将3D方向向量转换为同质空间。我没有看到一个干净的方法将一个向量转换为一个w不等于1的同质空间?
例如,看起来像这样的东西,但是"某些东西()"取而代之的会很棒:
template <typename FT>
Ray<FT>::Ray(Eigen::Matrix<FT, 3, 1> const & origin,
Eigen::Matrix<FT, 3, 1> const & direction)
: _origin(origin.homogeneous())
, _direction(direction.normalized().something()) {}
仔细阅读文档https://eigen.tuxfamily.org/dox/group__Geometry__Module.html,我没有看到一种简单的方法来做到这一点,而无需在内部创建单独的向量,我不想这样做。
我有什么遗失的东西吗?
编辑:这似乎有效,但必须有更好的方法。
template <typename FT>
Ray<FT>::Ray(Eigen::Matrix<FT, 3, 1> const & origin,
Eigen::Matrix<FT, 3, 1> const & direction)
: _origin(origin.homogeneous())
, _direction(direction.normalized().homogeneous() - Eigen::Matrix<FT, 4, 1>(0, 0, 0, 1)) {
}
这适用于我的情况,但它在任何方面都不理想。如果某人有更好的方法在构造均匀向量时设置向量的w分量,那仍然会好得多。
答案 0 :(得分:0)
您可以使用逗号初始化程序语法:
direction << direction.normalized(), 0;
或在初始化列表中:
: _direction((Vector4d() << direction.normalized(), 0).finished())