ベクトル外積の計算方法ドキュメントから、*演算子は外積を実行し、;*は内積を実行するように見えます。 クロス積を使用して、次のような既知のベクトルのペアに垂直なベクトルを決定したいと思います。
p1 = [1, 2, 4];
p2 = [2, 1, 4];
p3 = [2, 2, 4];
v1 = p3 - p1;
v2 = p2 - p1;
xProd = v1*v2;
3つの点が平面を定義し、それらの点から取得された2つのベクトルが同じことを行い、外積はその平面の法線ベクトルを与える必要があります。 問題は、乗算される2つの行列(v1とv2)の次元が一致しないことです。nRows(v1)はnCols(v2)と等しくなければなりません。 ベクトル外積の簡略化された式を使用してこれを手動で実装できますが、行列の乗算を処理するためにこれを別の方法でフォーマットする方法を知っている人はいますか?
Re:ベクトル外積の計算方法cwilldenに感謝します、これは本質的に私が実装したものです。 私は3Dベクトルのみに関心があるので、それは私にとってはうまくいきますが、これが組み込み関数ではないことに驚いています。 他の誰かがそのような方法を知っているかどうかを確認するために、これを少し開いたままにしておきます。
Re:ベクトル外積の計算方法誰かがこれを行うための賢い方法を考え出すことを願っています。 det()関数は密接に関連していますが、det(3x3行列)を使用してスカラー値以上を取得する方法がわかりません。 det(2x2 sub-matrix)を3回使用できると思いますが、簡単だと思いますxyzzyアプローチはより単純で同じくらい速いです。
3Dシーンのサーフェス法線に使用します。JSLがいくつかあります。 https://community.jmp.com/t5/Uncharted/Custom-Visualization/ba-p/191559 。
Re:ベクトル外積の計算方法3x1(または1x3)のベクトルのみを扱っている場合は、計算効率やエレガンスはそれほど重要ではないと思います。これで十分でしょうか?
cross_prod = function({v1, v2},
matrix({v1[2]*v2[3] - v1[3]*v2[2], v1[1]*v2[3] - v1[3]*v2[1], v1[1]*v2[2] - v1[2]*v2[1]});
);
cross_prod(v1, v2);