Ich versuche, eine Ebene aus drei Punkten in 3D zu konstruieren. Ich möchte projektive Geometrie verwenden, um dies zu erreichen.Projektive Geometrie - Finden Ebene in 3D mit Eigen
Soweit ich weiß, kann man „einfach“ lösen die im Anschluss an eine Ebene zu finden:
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
Ich weiß, dass ich eine constrain haben müssen. Daher möchte ich x(3) = 1
setzen. Kann mir bitte jemand auf die richtige Methode hinweisen?
Bisher habe ich den folgenden Code:
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());
Ich würde für eine Nicht-Matrix-Methode gehen, siehe https://en.wikipedia.org/wiki/Plane_(geometry)#Method_3. – Shaana
Die Idee ist, projektive Geometrie zu verwenden, um eine einfache Möglichkeit zu haben, zu testen, ob andere Punkte zu dieser Ebene gehören, indem einfach 'Plane.transpose() * otherPoint' – NewTech