如何计算向量叉积从文档看来 * 运算符将执行叉积,而 ;* 将执行点积。 我想使用叉积来确定垂直于一对已知向量的向量,如下所示:
p1 = [1, 2, 4];
p2 = [2, 1, 4];
p3 = [2, 2, 4];
v1 = p3 - p1;
v2 = p2 - p1;
xProd = v1*v2;
3 个点定义一个平面,从这些点获取的两个向量做同样的事情,叉积应该给出该平面的法向量。 问题似乎是相乘的两个矩阵(v1 和 v2)的维数不一致——nRows(v1) 应该等于 nCols(v2)。 我可以用一个简化的矢量叉积公式手动实现这个,但是有谁知道如何以不同的方式格式化它以使用矩阵乘法?
回复:如何计算向量叉积谢谢 cwillden,这基本上就是我已经实现的。 它确实对我有用,因为我只关心 3D 矢量,但我很惊讶这不是内置函数。 我打算把这个打开一点,看看是否有其他人知道这种方法。
回复:如何计算向量叉积我希望有人想出一个聪明的方法来做到这一点。 det() 函数密切相关,但我不明白如何使用 det(3x3 矩阵) 来获取标量值以外的值。 我认为你可以使用 det(2x2 sub-matrix) 三次,但我认为直截了当木木方法更简单,同样快速。
我将它用于 3D 场景中的表面法线,其中有一些 JSL https://community.jmp.com/t5/Uncharted/Custom-Visualization/ba-p/191559 .
回复:如何计算向量叉积如果您只处理 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);