私は点群を持っています、すべての点は3D空間の平面上にあります。各ポイントを2D座標に、またはその逆に変換する必要があります。
(x、y、z)in Coordinate System [〜#〜] a [〜#〜] =>変換行列(T1)=>(x、y)in座標系[〜#〜] b [〜#〜]
(x、y)in座標系[〜#〜] b [〜#〜] =>変換行列(T2)=>(x、y、z)in座標系[〜#〜] a [〜#〜]
T1とT2が必要です。座標系[〜#〜] b [〜#〜]は、任意の参照フレームにすることができます。
私の知る限り、すべての点は同じ平面にあり、寸法を減らして後で座標を復元したいと考えています。
3つの非同一線上の点A、B、Cを取得します。ベクトルABとACを作成します。
その平面の法線は
_ N = AB x AC //cross product
_
ここで、ベクトルABとNを正規化して、単位_U = uAB
_とuN
を取得します。 2番目の基本ベクトルを作成します(これは単位であり、平面にあります)
_ V = U x uN
_
これで、4つのベーシスポイントがあります_A, u=A+U, v=A+V, n=A+uN
_
変換では、これらのポイントを対応して4つ組の_(0,0,0), (1,0,0), (0,1,0), (0,0,1)
_にマップする必要があります。
次に、このマッピングを行うためのアフィン変換行列について説明します。
_ [Ax ux vx nx] [0 1 0 0]
M * [Ay uy vy ny] = [0 0 1 0]
[Az uz vz nz] [0 0 0 1]
[1 1 1 1 ] [1 1 1 1]
_
または
_ M * S = D
M * S * Sinv = D * Sinv
M = D * Sinv
_
したがって、_S=[Ax ux...]
_の逆行列を計算し、必要な行列Mを取得します。
平面内の任意の点にMを適用すると、z成分がゼロの新しい座標が得られます。
Mの逆数を(x、y、0)に適用すると、指定された平面に3D座標が生成されます。
メープルシート ポイント付きA=1,1,1 B=2,1,1 C=1,1,2 (in plane Y=1)
新しい座標AA、BB、CCのz成分はゼロです。
同じ平面内の任意の点の場合、マッピング後のzコンポーネントもゼロです。
_ P:=vector([-2,1,7,1]);
> PP := multiply(M, P);
PP := [-3, 6, 0, 1]
_