sobota, 6 listopada 2010

[WPF 3D] Wyznaczanie wektora prostopadłego, czyli iloczyn wektorowy [PL]

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 );
    }
Promuj

1 komentarz:

  1. Bez problemu znalazłem gotową procedurę i chyba nie trzeba tego samemu implementować:

    Vector3D.CrossProduct(Vector3D vector1, Vector3D vector2);

    OdpowiedzUsuń

Posty powiązane / Related posts