【发布时间】:2019-01-24 06:23:27
【问题描述】:
注意:我可能正在做一些不应该做的事情,我的本征知识非常有限,但找不到我要找的东西。
我目前正在使用 eigen 来获取点云线的方向向量。
//Compute eigenvalues and eigenvectors:
Eigen::SelfAdjointEigenSolver<Eigen::MatrixXf> eig(scatter);
Eigen::MatrixXf eigvecs = eig.eigenvectors();
//largest eigenvalue is yeild at its last column
b->x = eigvecs(0, 2);
b->y = eigvecs(1, 2);
b->z = eigvecs(2, 2);
其中“b”是一个结构上的指针,定义为:
typedef struct
{
double x;
double y;
double z;
}3d_point;
使用这个“分散”输入:
80.0156 5.29252 2.06179
5.29252 0.489233 0.214055
2.06179 0.214055 3.17522
eigein 输出 b(即线的方向向量):
b = (0.997452, 0.06653, 0.0268062)
我知道范数等于 1 的方向向量就足够了。 但由于我知道这条线的“全局”起点,我想使用“b”来获取全局终点,从而获得这条线的长度。
有什么方法可以得到未标准化的 b 向量?
=================
按照我目前的答案:
Eigen::Vector3d meanV ;
meanV << a->x, a->y, a->z; //a is a 3d_point struct
points.rowwise() -= meanV.transpose(); // with Eigen::MatrixXd points = Eigen::MatrixXd::Zero(700, 3);
这显然失败了,因为尺寸不匹配:
Eigen::VectorXd projected = eigvecs.col(2).transpose() * points;
我在你的回答中误解了什么?
【问题讨论】:
标签: eigen eigenvalue eigenvector