Tym razem nie będzie nic odkrywczego, a wpis ten jest raczej „ku pamięci”, abym nie musiał więcej razy tego szukać (a może
jeszcze komuś się przyda ...). Otóż te wpis będzie poświęcony iloczynowi wektorowemu.
Niniejszy wpis poza prezentacją różnych i niezależnych od konkretnego wykorzystania treści stanowi również opis pewnych zagadnień związanych z projektem Mesh Diagram 3D.Informacje dotyczące projektu oznaczone są etykietą MeshDiagram3D.
Czemu potrzebowałem iloczynu wektorowego? Otóż w aplikacji, którą tworzę (MeshDiagram3D)
potrzebowałem wyznaczyć wektor prostopadły do płaszczyzny
wyznaczonej przez dwa inne wektory. A właśnie takim wektorem (w
przestrzeni 3D) jest wektor wyznaczony przez iloczyn wektorowy (ang.
„cross
product”) dwóch wektorów.
Jak więc wyznaczyć taki wektor? Szukałem gotowej procedury w .NET
Framework, ale nie znalazłem, więc napisałem prostą funkcję:
/// <summary> /// Gets the cross product of two 3d vectors. /// /// Let u and v be two vectors given by their 3 components as follows /// u = [ x1 , y1 , z1 ] and v = [ x2 , y2 , z2 ] /// The cross product, noted by x, of the two vectors u and v given above is another vector w given by /// w = u x v = [ x1 , y1 , z1 ] x [ x2 , y2 , z2 ] = [ x , y , z ] /// with the components x, y and z given by: /// x = y1*z2 - z1*y2 , y = z1*x2 - x1*z2 and z = x1*y2 - y1*x2 /// /// </summary> /// <param name="U">The U vector.</param> /// <param name="V">The V vector.</param> /// <returns>cross product of two 3d vectors</returns> public static Vector3D GetCrossProduct( Vector3D U, Vector3D V ) { return new Vector3D( U.Y * V.Z - U.Z * V.Y, U.Z * V.X - U.X * V.Z, U.X * V.Y - U.Y * V.X ); }
Bez problemu znalazłem gotową procedurę i chyba nie trzeba tego samemu implementować:
OdpowiedzUsuńVector3D.CrossProduct(Vector3D vector1, Vector3D vector2);