【发布时间】:2017-08-05 23:27:56
【问题描述】:
我正在尝试用 3D 中的三个点构建一个平面。 我想使用射影几何来实现这一点。
据我所知,可以“简单地”解决以下问题来找到一架飞机:
A * x = 0 ,where
A is a 3x4 Matrix - each row being one of the points (x,y,z,1)
x is the plane I want to find
我知道我需要一个约束。因此我想设置x(3) = 1。
有人可以指出正确的使用方法吗?
到目前为止,我有以下代码:
Eigen::Vector4f p1(0,0,1,1);
Eigen::Vector4f p2(1,0,0,1);
Eigen::Vector4f p3(0,1,0,1);
Eigen::Matrix<float,3,4> A;
A << p1.transpose(), p2.transpose(), p3.transpose();
// Throws compile error
// Eigen::Vector4f Plane = A.jacobiSvd(ComputeThinU | ComputeThinV).solve(Vector4f::Zero());
//throws runtime error (row-number do not match)
// Eigen::Vector4f Plane = A.fullPivHouseholderQr().solce(Eigen::Vector4f::Zero());
【问题讨论】:
-
我会选择非矩阵方法,请参阅en.wikipedia.org/wiki/Plane_(geometry)#Method_3。
-
这个想法是使用射影几何通过简单地计算
Plane.transpose() * otherPoint来测试其他点是否属于这个平面的简单方法
标签: c++ 3d eigen projective-geometry