私は3Dで3つの点から平面を構築しようとしています。 これを達成するために射影ジオメトリを使用したいと思います。射影ジオメトリ - 固有値を使って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
に設定したいと思います。 誰かが正しい方法を教えてくれますか?あなたに3行ベクトルを与える4行ベクトルを掛け
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());
私は非マトリクス方法については、https://en.wikipedia.org/wiki/Plane_(geometry)#Method_3を参照してください。 – Shaana
射影ジオメトリを使って、 'Plane.transpose()* otherPoint'を計算するだけで、他の点がこの平面に属するかどうかを簡単にテストすることができます。 – NewTech