飛行機を別の表現に変換する必要があります。Nが法線で、Oが平面上の任意の点であるもの。あなたがすでに知っている普通のこと、それはあなたの(xyz)です。平面上の点も簡単です。これは通常のN倍の距離dです。
通常の方法でOを4x4行列で変換すると、これが新しいOになります。4x4行列で乗算するには、Vector4が必要です。Wコンポーネントを1(x、y、z、1)に設定します。
また、 Nを4x4行列で変換しますが、Wコンポーネントを0(x、y、z、0)に設定します。Wコンポーネントを0に設定すると、法線が変換されなくなります。マトリックスが平行移動と回転だけで構成されている場合、この手順はそれほど単純ではありません。変換行列を乗算する代わりに、行列の逆行列の転置行列を乗算する必要があります。つまり、ここに理由についての適切な説明があります。Matrix4.Transpose(Matrix4.Invert(Transform))
これで、新しい法線ベクトルNと新しい位置ベクトルOができました。しかし、xyzd形式でもう一度欲しいと思いますか?問題ない。前と同じように、xyzは通常のNであり、残っているのはdを計算することだけです。dは、法線ベクトルに沿った、原点からの平面の距離です。したがって、これは単にOとNの内積です。
あります!これを行っている言語を教えていただければ、コードにも喜んで入力します。
編集、擬似コード:
平面はvector3 xyz
とnumber d
、行列はmatrix4x4 M
vector4 O = (xyz * d, 1)
vector4 N = (xyz, 0)
O = M * O
N = transpose(invert(M)) * N
xyz = N.xyz
d = dot(O.xyz, N.xyz)
xyz
d
新しい飛行機を表します