Metropoli BBS
VIEWER: vector.c MODE: TEXT (CP437)
//        ╔═══════════════════════════════════════════════╗
//	  ║                  Vector.C                     ║
//	  ║                                               ║
//	  ║    For more info about Vector see Math.txt    ║
//	  ║                                               ║
//	  ║       By Volpone of Malorean Effect           ║
//	  ║     for crazy mathematicians like Toto        ║
//	  ║                                               ║
//	  ║                                               ║
//	  ║               Version 1.0                     ║
//	  ║          Release November 1993                ║
//	  ║                                               ║
//	  ║  Hello to : Toto,Sally,42 Crew,Aghesacha,     ║
//	  ║             Mc2,Sun,Redlight,Locked,Fafa      ║
//	  ║                                               ║
//	  ╚═══════════════════════════════════════════════╝

#include <math.h>


typedef struct { float X,Y,Z    ; } Cvector;
typedef struct { float R,Fi,Z   ; } Pvector;

Cvector operator +(Cvector U,Cvector V);
Pvector operator +(Pvector U,Pvector V);
Cvector operator -(Cvector U,Cvector V);
float   operator *(Cvector U,Cvector V);
Cvector operator *(float   U,Cvector V);
Cvector operator ^(Cvector U,Cvector V);
Cvector operator /(Cvector U,Cvector V);

Cvector DVP       (Cvector U,Cvector V,Cvector W);
//     -> -> ->     ->   ->  ->
// DVP(U, V, W  ) = U ^ (V ^ V);

Pvector PolarConvert (Cvector U);


//************************************************************************

Cvector operator +(Cvector U,
		   Cvector V)
{ Cvector Buf ;
  Buf.X=U.X+V.X;
  Buf.X=U.Y+V.Y;
  Buf.X=U.Z+V.Z;
  return (Buf);
};
Pvector operator +(Pvector U,
		   Pvector V)
{ Pvector Buf ;
  Buf.R=U.R+V.R;
  Buf.Fi=U.Fi+V.Fi;
  Buf.Z=U.Z+V.Z;
  return (Buf);
};

//************************************************************************

Cvector operator -(Cvector U,
		   Cvector V)
{ Cvector Buf ;
  Buf.X=U.X-V.X;
  Buf.X=U.Y-V.Y;
  Buf.X=U.Z-V.Z;
  return (Buf);
};

//************************************************************************

float   operator *(Cvector U,
		   Cvector V)
{ float Buf ;
  Buf=U.X*V.X+U.Y*V.Y+U.Z*V.Z;
  return (Buf);
};

//************************************************************************

Cvector operator *(float   U,
		   Cvector V )
{ Cvector Buf ;
  Buf.X=U*V.X;
  Buf.Y=U*V.Y;
  Buf.Z=U*V.Z;
  return (Buf);
};

//************************************************************************

Cvector operator ^(Cvector U,
		   Cvector V  )

{ Cvector Buf ;
  Buf.X=U.Y*V.Z-V.Y*U.Z;
  Buf.Y=U.Z*V.X-V.Z*U.X;
  Buf.Z=U.X*V.Y-V.X*U.Y;
  return (Buf);
};

//************************************************************************

Cvector operator /(Cvector U,
		   Cvector V  )

{ Cvector Buf ;
  Buf.X=U.Y*V.Z-V.Y*U.Z;
  Buf.Y=U.Z*V.X-V.Z*U.X;
  Buf.Z=U.X*V.Y-V.X*U.Y;
  return (Buf);
};


//************************************************************************
Cvector DVP       (Cvector U,Cvector V,Cvector W)
{ Cvector Buf ;
  Buf=(U*W)*V-(U*V)*W;
  return (Buf);

}

//************************************************************************
Pvector PolarConvert (Cvector U)
{ Pvector Buf ;
		  Buf.R  = sqrt(U.X*U.X+U.Y*U.Y);
  if (U.X=0)      Buf.Fi = 0 			;
	     else Buf.Fi = atan(U.Y/U.X)	;
		  Buf.Z  = U.Z			;

  return (Buf);
}
//************************************************************************

[ RETURN TO DIRECTORY ]