J'essaie de construire un plan sur trois points en 3D. Je veux utiliser la géométrie projective pour y parvenir.Géométrie projective - Trouver un plan en 3D en utilisant l'image propre
Pour autant que je sache, on peut « simplement » résoudre ce qui suit pour trouver un avion:
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
Je sais que je dois avoir une contrainte. Par conséquent, je veux définir x(3) = 1
. Quelqu'un peut-il me diriger vers la bonne méthode à utiliser?
Jusqu'à présent, j'ai le code suivant:
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());
Je voudrais aller pour une méthode non-matrice, voir https://en.wikipedia.org/wiki/Plane_(geometry)#Method_3. – Shaana
L'idée est d'utiliser la géométrie projective pour avoir un moyen facile de tester si d'autres points appartiennent à ce plan en calculant simplement 'Plane.transpose() * otherPoint' – NewTech