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


 
Module checkit {
            class Vector {
                  \\ by default are double
                  a,b,c
                  Property ToString$ {
                        Value {
                            link parent a,b,c to a,b,c 
                             value$=format$("({0}, {1}, {2})",a,b,c)
                        }
                  }
                  Operator "==" {
                        read n
                        push .a==n.a and .b==n.b and .c==n.c
                  }
                  Operator Unary {
                        .a-! : .b-! : .c-!
                  }
                  Operator "+"  {
                        Read v2
                        For this, v2 {
                              .a+=..a :.b+=..b:.c+=..c:
                        }
                  }
                  Function Mul(r)  {
                        vv=this 
                        for vv {
                              .a*=r:.b*=r:.c*=r
                        }
                        =vv
                  }
                  Function Dot(v2)  {
                        def double sum
                        for  this, v2 {
                            sum=.a*..a+.b*..b+.c*..c
                        }
                        =sum
                  }
                  Operator "*" {
                        Read v2
                        For This, v2 {
                              Push .b*..c-.c*..b
                              Push .c*..a-.a*..c
                              .c<=.a*..b-.b*..a
                              Read .b, .a
                        }
                  }      
                  class:
                  module Vector {
                        if match("NNN") then {
                              Read .a,.b,.c
                        }
                  }
            }
            A=Vector(3,4,5)
            B=Vector(4,3,5)
            C=Vector(-5,-12,-13)
            Print "A=";A.toString$
            Print "B=";B.toString$
            Print "C=";C.toString$
            Print "A dot B="; A.dot(B)
            AxB=A*B
            Print "A x B="; AxB.toString$
            Print "A dot (B x C)=";A.dot(B*C)
            AxBxC=A*(B*C)
            Print "A x (B x C)=";AxBxC.toString$
            Def ToString$(a)=a.toString$
            Print "A x (B x C)=";ToString$(A*(B*C))
}
Checkit
 