Cómo calcular el producto cruzado vectorialSegún la documentación, parece que el operador * realizará un producto cruzado y ;* realizará un producto punto. Quiero usar un producto cruzado para determinar el vector normal a un par de vectores conocidos como este:
p1 = [1, 2, 4];
p2 = [2, 1, 4];
p3 = [2, 2, 4];
v1 = p3 - p1;
v2 = p2 - p1;
xProd = v1*v2;
3 puntos definen un plano, dos vectores tomados de esos puntos hacen lo mismo, el producto cruzado debe dar el vector normal de ese plano. El problema parece ser que las dimensiones de las dos matrices que se multiplican (v1 y v2) no concuerdan: nRows(v1) debería ser igual a nCols(v2). Puedo implementar esto manualmente con una fórmula simplificada para productos vectoriales cruzados, pero ¿alguien sabe cómo formatear esto de manera diferente para trabajar con la multiplicación de matrices?
Re: Como calcular el Producto Cruzado VectorialGracias cwillden, esto es esencialmente lo que he implementado. Funciona para mí ya que solo me preocupan los vectores 3D, pero me sorprende que esta no sea una función integrada. Voy a dejar esto abierto por un momento para ver si alguien más sabe de esa manera.
Re: Como calcular el Producto Cruzado VectorialEspero que a alguien se le ocurra una manera inteligente de hacer esto. La función det () está estrechamente relacionada, pero no entiendo cómo usar det (matriz 3x3) para obtener más de un valor escalar. Creo que podrías usar det (submatriz 2x2) tres veces, pero creo que lo más sencillo xyzzy El enfoque es más simple e igual de rápido.
Lo uso para las superficies normales en escenas 3D, hay algo de JSL en https://community.jmp.com/t5/Uncharted/Custom-Visualization/ba-p/191559 .
Re: Como calcular el Producto Cruzado VectorialSi solo está tratando con vectores 3x1 (o 1x3), entonces creo que la eficiencia computacional o la elegancia no son demasiado importantes.¿Sería esto suficiente?
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);