A vector is defined as having three dimensions as being represented by an ordered collection of three numbers:   (X, Y, Z).

If you imagine a graph with the   x   and   y   axis being at right angles to each other and having a third,   z   axis coming out of the page, then a triplet of numbers,   (X, Y, Z)   would represent a point in the region,   and a vector from the origin to the point.

Given the vectors:

        A = (a1,  a2,  a3) 
        B = (b1,  b2,  b3) 
        C = (c1,  c2,  c3) 

then the following common vector products are defined:

 The dot product       (a scalar quantity)
  A • B = a1b1   +   a2b2   +   a3b3  
 The cross product       (a vector quantity)
  A x B = (a2b3  -   a3b2,     a3b1   -   a1b3,     a1b2   -   a2b1)  
 The scalar triple product       (a scalar quantity)
  A • (B x C) 
 The vector triple product       (a vector quantity)
  A x (B x C) 


Task

Given the three vectors:

        a = ( 3,    4,    5)
        b = ( 4,    3,    5)
        c = (-5,  -12,  -13)

 Create a named function/subroutine/method to compute the dot product of two vectors.
 Create a function to compute the cross product of two vectors.
 Optionally create a function to compute the scalar triple product of three vectors.
 Optionally create a function to compute the vector triple product of three vectors.
 Compute and display: a • b
 Compute and display: a x b
 Compute and display: a • (b x c), the scalar triple product.
 Compute and display: a x (b x c), the vector triple product.


References

   A starting page on Wolfram MathWorld is   Vector Multiplication .
   Wikipedia   dot product. 
   Wikipedia   cross product. 
   Wikipedia   triple product.


Related tasks

   Dot product
   Quaternion type


 
PROGRAM VECTORPRODUCT
 
!$DOUBLE
 
TYPE TVECTOR=(X,Y,Z)
 
DIM A:TVECTOR,B:TVECTOR,C:TVECTOR
 
DIM AA:TVECTOR,BB:TVECTOR,CC:TVECTOR
DIM DD:TVECTOR,EE:TVECTOR,FF:TVECTOR
 
PROCEDURE DOTPRODUCT(DD.,EE.->DOTP)
    DOTP=DD.X*EE.X+DD.Y*EE.Y+DD.Z*EE.Z
END PROCEDURE
 
PROCEDURE CROSSPRODUCT(DD.,EE.->FF.)
  FF.X=DD.Y*EE.Z-DD.Z*EE.Y
  FF.Y=DD.Z*EE.X-DD.X*EE.Z
  FF.Z=DD.X*EE.Y-DD.Y*EE.X
END PROCEDURE
 
PROCEDURE SCALARTRIPLEPRODUCT(AA.,BB.,CC.->SCALARTP)
  CROSSPRODUCT(BB.,CC.->FF.)
  DOTPRODUCT(AA.,FF.->SCALARTP)
END PROCEDURE
 
PROCEDURE VECTORTRIPLEPRODUCT(AA.,BB.,CC.->FF.)
  CROSSPRODUCT(BB.,CC.->FF.)
  CROSSPRODUCT(AA.,FF.->FF.)
END PROCEDURE
 
PROCEDURE PRINTVECTOR(AA.)
  PRINT("(";AA.X;",";AA.Y;",";AA.Z;")")
END PROCEDURE
 
BEGIN
  A.X=3  A.Y=4    A.Z=5
  B.X=4  B.Y=3    B.Z=5
  C.X=-5 C.Y=-12  C.Z=-13
 
  PRINT("A: ";) PRINTVECTOR(A.)
  PRINT("B: ";) PRINTVECTOR(B.)
  PRINT("C: ";) PRINTVECTOR(C.)
 
  PRINT
  DOTPRODUCT(A.,B.->DOTP)
  PRINT("A.B    =";DOTP)
 
  CROSSPRODUCT(A.,B.->FF.)
  PRINT("AxB    =";) PRINTVECTOR(FF.)
 
  SCALARTRIPLEPRODUCT(A.,B.,C.->SCALARTP)
  PRINT("A.(BxC)=";SCALARTP)
 
  VECTORTRIPLEPRODUCT(A.,B.,C.->FF.)
  PRINT("Ax(BxC)=";) PRINTVECTOR(FF.)
END PROGRAM
 