unit Vectfunc;  { Letzte Aenderung: 29.10.2000 }

{ Funktionen fuer die Vektorrechnung (Addition, Subtraktion, Muliplikation und Division mit Skalaren, etc. }

interface
type vektor = array[1..3] of real;
type vektor2d = array[1..2] of real;
type parameter = real;

function vadd(va,vb : vektor) : vektor;  {Addition von Vektoren}
function vsubtr(va,vb : vektor) : vektor;
function vmult(va : vektor; t : parameter) : vektor;  {Multiplikation von Vektoren mit Skalaren}
function vdiv(va : vektor; t : parameter) : vektor;  {Komponentenweise dividieren}
function vscal(va,vb : vektor) : parameter; { Skalarprodukt }
function vprod(va,vb : vektor) : vektor;  {Vektorprodukt}
function betr2d(v2d : vektor2d) : parameter;   { Betrag eines 2d-Vektors}
function betr3d(v3d : vektor) : parameter;     { Betrag eines 3d-Vektors}



implementation

{ ************************** Vektorfunktionen ************************}


function vadd(va,vb : vektor) : vektor;  {Addition von Vektoren}
         var vc : vektor;

         begin
                 vc[1] := va[1] + vb[1];
                 vc[2] := va[2] + vb[2];
                 vc[3] := va[3] + vb[3];

                 vadd := vc;
         end;


function vsubtr(va,vb : vektor) : vektor;
{Subtraktion von Vektoren}

         var vc : vektor;

         begin
                 vc[1] := va[1] - vb[1];
                 vc[2] := va[2] - vb[2];
                 vc[3] := va[3] - vb[3];
                 vsubtr := vc;
         end;


function vmult(va : vektor; t : parameter) : vektor;  {Multiplikation von Vektoren mit Skalaren}
         var vc : vektor;

         begin
                 vc[1] := va[1] * t;
                 vc[2] := va[2] * t;
                 vc[3] := va[3] * t;

                 vmult := vc;
         end;



function vdiv(va : vektor; t : parameter) : vektor;  {Komponentenweise dividieren}
         var vc : vektor;

         begin
         if(t <> 0) then
                 begin
                 vc[1] := va[1] / t;
                 vc[2] := va[2] / t;
                 vc[3] := va[3] / t;

                 vdiv := vc;
                 end
          else
                 writeln('Div by zero, func vdiv.');
         end;


function vscal(va,vb : vektor) : parameter; { Skalarprodukt }

         begin
                 vscal := va[1]*vb[1] + va[2]*vb[2] + va[3]*vb[3];
         end;


function vprod(va,vb : vektor) : vektor;  {Vektorprodukt}
         var vc : vektor;

         begin
                 vc[1] := va[2] * vb[3] - va[3] * vb[2];
                 vc[2] := va[3] * vb[1] - va[1] * vb[3];
                 vc[3] := va[1] * vb[2] - va[2] * vb[1];

                 vprod := vc;
         end;




function betr3d(v3d : vektor) : parameter;     { Betrag eines 3d-Vektors}
         begin
                 betr3d := sqrt(v3d[1] * v3d[1] + v3d[2] * v3d[2] + v3d[3] * v3d[3]);
                 if(betr3d = 0) then writeln('Warning: function betr3d returns zero.');
         end;



function betr2d(v2d : vektor2d) : parameter;     { Betrag eines 2d-Vektors}
         begin
                 betr2d := sqrt(v2d[1] * v2d[1] + v2d[2] * v2d[2]);
                 if(betr2d = 0) then writeln('Warning: function betr2d returns zero.');
         end;

end.

