C++ 从矢量3f到矩阵4f的转换

C++ 从矢量3f到矩阵4f的转换,c++,eigen,C++,Eigen,我有以下功能 transformShape(Shape& shape, Eigen::Matrix4f transformation); 很明显,它可以变换几何形状,我有一个以 Eigen::Vector3f 我希望做一些类似的事情: Eigen::Vector3f myVector = //calculate Eigen::Matrix4f mat = Eigen::Matrix4f::Identity(); mat = myVector * mat; transformShap

我有以下功能

transformShape(Shape& shape, Eigen::Matrix4f transformation);
很明显,它可以变换几何形状,我有一个以

Eigen::Vector3f
我希望做一些类似的事情:

Eigen::Vector3f myVector = //calculate 
Eigen::Matrix4f mat = Eigen::Matrix4f::Identity();
mat = myVector * mat;
transformShape(shape, mat);
但这是不可能的,因为我将不同维度的结构相乘,所以我的问题是如何将向量3f转换为平移或四维向量


干杯

矢量4在第4个元素中的值应为0.0

如果它是一个点3,它将通过使用1.0的值扩展到点4

该组件称为“w”,搜索“Vector4 w”将给出一些结果,例如:
矢量4在第四个元素中的值应为0.0

如果它是一个点3,它将通过使用1.0的值扩展到点4

该组件称为“w”,搜索“Vector4 w”将给出一些结果,例如:

您可以使用Eigen::Transform对象来代替原始Matrix4f,该对象使用方便的函数封装Matrix4f。例如,如果变换是仿射的,请使用


有关使用Eigen进行空间变换的更多详细信息,请参见上一个链接。

您可以使用Eigen::Transform对象来使用方便的函数封装Matrix4f,而不是原始Matrix4f。例如,如果变换是仿射的,请使用


有关使用本征函数的空间变换的更多详细信息,请参见上一个链接。

向量(x,y,z)的平移矩阵的形式为

1 0 0 x
0 1 0 y
0 0 1 z
0 0 0 1
阅读

您还可以使用Eigen::Translation:

Vector3f v(1,2,3);
Matrix4f m = Affine3f(Translation3f(v)).matrix();

向量(x,y,z)的平移矩阵为

1 0 0 x
0 1 0 y
0 0 1 z
0 0 0 1
阅读

您还可以使用Eigen::Translation:

Vector3f v(1,2,3);
Matrix4f m = Affine3f(Translation3f(v)).matrix();

是的,但在eigen中不可能将矩阵4f与向量4相乘,我得到错误:“无效的矩阵乘积”不是“eigen::internal::static\u断言”的成员。也可以将mat*vecvtor.matrix()相乘,但是我得到了相同的错误,行mat=myVector*mat;这是无效的。mat*myVector可以,但它返回的是Vector4f,而不是4x4矩阵!是的,但在eigen中不可能将矩阵4f与向量4相乘,我得到错误:“无效的矩阵乘积”不是“eigen::internal::static\u断言”的成员。也可以将mat*vecvtor.matrix()相乘,但是我得到了相同的错误,行mat=myVector*mat;这是无效的。mat*myVector可以,但它返回的是Vector4f,而不是4x4矩阵!