Come calcolare il prodotto incrociato vettorialeDalla documentazione sembra che l'operatore * eseguirà un prodotto incrociato e ;* eseguirà un prodotto punto. Voglio usare un prodotto incrociato per determinare il vettore normale a una coppia di vettori noti come questo:
p1 = [1, 2, 4];
p2 = [2, 1, 4];
p3 = [2, 2, 4];
v1 = p3 - p1;
v2 = p2 - p1;
xProd = v1*v2;
3 punti definiscono un piano, due vettori presi da quei punti fanno lo stesso, il prodotto incrociato dovrebbe dare il vettore normale di quel piano. Il problema sembra essere che le dimensioni delle due matrici moltiplicate (v1 e v2) non coincidono -- nRows(v1) dovrebbe essere uguale a nCols(v2). Posso implementarlo manualmente con una formula semplificata per i prodotti incrociati vettoriali, ma qualcuno sa come formattarlo in modo diverso per lavorare con la moltiplicazione di matrici?
Re: Come calcolare il prodotto incrociato vettorialeGrazie cwillden, questo è essenzialmente ciò che ho implementato. Funziona per me poiché mi occupo solo di vettori 3D, ma sono sorpreso che questa non sia una funzione integrata. Lo lascerò aperto per un po' per vedere se qualcun altro sa di questo modo.
Re: Come calcolare il prodotto incrociato vettorialeSpero che qualcuno trovi un modo intelligente per farlo. La funzione det() è strettamente correlata, ma non capisco come usare det(3x3 matrix) per recuperare più di un valore scalare. Penso che potresti usare det (sottomatrice 2x2) tre volte, ma penso che sia semplice xyzzy approccio è più semplice e altrettanto veloce.
Lo uso per le normali di superficie nelle scene 3D, c'è del JSL https://community.jmp.com/t5/Uncharted/Custom-Visualization/ba-p/191559 .
Re: Come calcolare il prodotto incrociato vettorialeSe hai a che fare solo con vettori 3x1 (o 1x3), allora penso che l'efficienza o l'eleganza computazionale non siano troppo importanti.Questo sarebbe sufficiente?
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);