So berechnen Sie das VektorkreuzproduktAus der Dokumentation sieht es so aus, als würde der Operator * ein Kreuzprodukt und ;* ein Punktprodukt ausführen. Ich möchte ein Kreuzprodukt verwenden, um den Vektor normal zu einem Paar bekannter Vektoren wie folgt zu bestimmen:
p1 = [1, 2, 4];
p2 = [2, 1, 4];
p3 = [2, 2, 4];
v1 = p3 - p1;
v2 = p2 - p1;
xProd = v1*v2;
3 Punkte definieren eine Ebene, zwei von diesen Punkten genommene Vektoren tun dasselbe, das Kreuzprodukt sollte den Normalenvektor dieser Ebene ergeben. Das Problem scheint zu sein, dass die Dimensionen der beiden zu multiplizierenden Matrizen (v1 und v2) nicht übereinstimmen – nRows(v1) sollte gleich nCols(v2) sein. Ich kann dies manuell mit einer vereinfachten Formel für Vektorkreuzprodukte implementieren, aber weiß jemand, wie man dies anders formatiert, um mit der Matrixmultiplikation zu arbeiten?
Betreff: Wie berechnet man das Vektorkreuzprodukt?Danke cwillden, das ist im Wesentlichen das, was ich implementiert habe. Es funktioniert für mich, da ich mich nur mit 3D-Vektoren befasse, aber ich bin überrascht, dass dies keine eingebaute Funktion ist. Ich werde dies für eine Weile offen lassen, um zu sehen, ob jemand anderes einen solchen Weg kennt.
Betreff: Wie berechnet man das Vektorkreuzprodukt?Ich hoffe, jemand findet einen cleveren Weg, dies zu tun. Die Funktion det() ist eng verwandt, aber ich verstehe nicht, wie man det(3x3-Matrix) verwendet, um mehr als einen Skalarwert zurückzugeben. Ich denke, Sie könnten det(2x2 sub-matrix) dreimal verwenden, aber ich denke, das ist einfach xyzzy ist einfacher und genauso schnell.
Ich verwende es für die Oberflächennormalen in 3D-Szenen, da ist etwas JSL drin https://community.jmp.com/t5/Uncharted/Custom-Visualization/ba-p/191559 .
Betreff: Wie berechnet man das Vektorkreuzprodukt?Wenn Sie immer nur mit 3x1- (oder 1x3-) Vektoren arbeiten, denke ich, dass Recheneffizienz oder Eleganz nicht allzu wichtig sind.Wäre das ausreichend?
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);