3D 空間に一連のデータ ポイントがあり、それらはすべて特定の平面にあるようです。PCA を使用してプレーン パラメーターを計算します。PCA の 3 番目のコンポーネントは、平面の法線ベクトル (最も弱いコンポーネント) を示します。
次にやりたいことは、すべてのポイントを上記の平面に変換し、それを 2D で見ることです。
私の考えは、次のことをすることでした:
- 平面上の中心点 (平均点) を見つける
- すべてのデータ ポイントからそれを減算して、原点の周りに配置します
- (0,0,-1)になるように法線を回転させます
- この回転をすべてのデータ ポイントに適用します
- 正射影を使用する (基本的には z 軸をスキップする)
今、私は正しい回転操作を見つけることに行き詰まっています。acos または atan を使用して、2 つの回転行列を設定してみました。両方の方法 (acos を使用、atan を使用) で間違った結果が得られるようです。ここで私を助けてくれるかもしれません!
Matlab コードは次のとおりです。
b = atan(n(1) / n(2));
rotb = [cos(b) -sin(b) 0; sin(b) cos(b) 0; 0 0 1];
n2 = n * rotb;
a = atan(n(1) / n(3));
rota = [cos(a) 0 sin(a); 0 1 0; -sin(a) 0 cos(a)];
n3 = n2 * rotaows:
n2
私はゼロのy成分を持つことを期待しています。ただし、ベクトル (-0.6367、0.7697、0.0467) では既に失敗しています。