Eigen::Vector3f 转Eigen::VectorXd
时间: 2023-07-13 14:31:07 浏览: 247
将Eigen::Vector3f转换为Eigen::VectorXd,可以使用VectorXd的构造函数,例如:
```
Eigen::Vector3f vec3f(1.0f, 2.0f, 3.0f);
Eigen::VectorXd vecXd(vec3f.size());
vecXd << vec3f(0), vec3f(1), vec3f(2);
```
也可以使用cast()方法将Vector3f转换为Vector3d,然后使用VectorXd的构造函数将其转换为VectorXd,例如:
```
Eigen::Vector3f vec3f(1.0f, 2.0f, 3.0f);
Eigen::Vector3d vec3d = vec3f.cast<double>();
Eigen::VectorXd vecXd(vec3d.size());
vecXd << vec3d(0), vec3d(1), vec3d(2);
```
注意,这里的VectorXd需要指定大小,大小应该与Vector3d相同。
相关问题
Eigen::Vector3f 赋值给Eigen::VectorXd(2)
将 `Eigen::Vector3f` 赋值给 `Eigen::VectorXd(2)` 可以使用 `Eigen::Map` 实现:
```cpp
Eigen::Vector3f vec3f(1.0f, 2.0f, 3.0f);
Eigen::VectorXd vecXd = Eigen::Map<Eigen::VectorXd>(vec3f.data(), 2);
```
其中,`Eigen::Map` 将 `vec3f` 的前两个元素映射到 `Eigen::VectorXd(2)` 中,`vec3f.data()` 返回 `vec3f` 的数据指针,`2` 表示映射的维度。这样,`vecXd` 就是 `vec3f` 的前两个元素构成的向量,类型为 `Eigen::VectorXd(2)`。需要注意的是,`Eigen::Map` 并不改变底层数据,只是将数据按照指定的方式解释为一个新的向量。因此,在使用 `vecXd` 时应该确保其对应的内存空间是有效的。
Eigen::Vector3f vec3f(1.0f, 2.0f, 3.0f);Eigen::VectorXd(2) vec2 = vec.head<2>();std::cout << vec2;
这段代码是不合法的,因为 `Eigen::VectorXd(2)` 表示的是一个大小为 2 的零向量,不能将一个大小为 3 的向量赋值给它。如果想要将 `vec3f` 的前两个元素赋值给一个大小为 2 的向量,可以使用如下代码:
```cpp
Eigen::Vector3f vec3f(1.0f, 2.0f, 3.0f);
Eigen::VectorXd vec2 = vec3f.head<2>();
std::cout << vec2;
```
其中,`vec3f.head<2>()` 返回 `vec3f` 的前两个元素构成的 `Eigen::Vector2f` 向量,然后通过隐式类型转换赋值给 `Eigen::VectorXd` 类型的 `vec2`。最后,输出 `vec2` 的值。需要注意的是,因为 `vec2` 是 `Eigen::VectorXd` 类型的向量,输出时需要使用 `std::cout << vec2.transpose()`,将其转置为一个行向量。
阅读全文