
EXPORT Angle(V1,V2)
//angle between two vectors
//praying rn
BEGIN
LOCAL θ;
θ:=ACOS(DOT(V1,V2)/(ABS(V1)*ABS(V2)));
RETURN θ;
END;

EXPORT Angle()
BEGIN
RETURN "Angle([X1,Y1],[X2,Y2]) > θ";
END;


EXPORT Unit(V)
BEGIN
// RETURN UNIT VECTOR
LOCAL VL;
VL:=(V/(ABS(V)));
RETURN VL;
END;

EXPORT Unit()
BEGIN
RETURN "Unit([X,Y,Z]) > Unit Vector";
END;

EXPORT UnitCAS(V)
//return algebraic unit vector
BEGIN
LOCAL VL;
VL:=(V/CAS(ABS(V)));
RETURN VL;
//  local cmd:="RREF(V/ABS(V))";
//  CAS(cmd);
END;

EXPORT UnitCAS()
BEGIN
RETURN "UnitCAS([X,Y,Z]) > Algebraic Unit Vector";
END;

EXPORT Vam2c(A,M)
//Angle CCW +X axis and Magnitude
//returns vector components
BEGIN
LOCAL X;
LOCAL Y;
X:=COS(A)*M;
Y:=SIN(A)*M;
RETURN [X,Y]; 
END;

EXPORT Vam2c(A,B,M)
//Angle CCW +X axis and Magnitude
//returns vector components
BEGIN
LOCAL X;
LOCAL Y;
LOCAL Z;
LOCAL H;
Z:=COS(B)*M;
H:=SIN(B)*M;
X:=COS(A)*H;
Y:=SIN(A)*H;
RETURN [X,Y,Z]; 
END;

EXPORT Vam2c()
BEGIN
PRINT();
PRINT("Vam2c(θ, Magnitude) >> [X, Y]\n");
PRINT("Vam2c(θ, Beta, Magnitude) >> [X, Y, Z]");
END;

EXPORT Vc2am(V)
BEGIN
LOCAL Θ, β, M, D;
D:=DIM(V);
Θ:=ATAN(V[2]/V[1]);
M:=ABS(V);
CASE
IF D(1)==2 THEN  
RETURN {Θ,M};
END;
IF D(1)==3 THEN  
β:=ACOS(V[3]/M);
RETURN {Θ, β, M};
END;
DEFAULT
RETURN "ERROR";
END;
END;

EXPORT Vc2am()
BEGIN
PRINT();
PRINT("Vc2am([X,Y] >> {Θ, Magnitude}\n");
PRINT("Vc2am([X,Y,Z] >> {Θ, β, Magnitude}");
END;

EXPORT Vabc(V)
// Returns alpha beta and gamma angles of a 3d vector
BEGIN
A:=Angle(V,[1,0,0]);
B:=Angle(V,[0,1,0]); 
C:=Angle(V,[0,0,1]);
RETURN {A,B,C};  
END;

EXPORT Vabc()
BEGIN
RETURN "Angle([X, Y, Z]) >> {α, β, γ}";
END; 

Export i2c(ic)
BEGIN
LOCAL POLAR,ANGLE,MAG,VEC;
POLAR:=polar_coordinates(ic);
ANGLE:=POLAR[2];
MAG:=POLAR[1];
VEC:=Vam2c(ANGLE,MAG);
RETURN VEC;
END;

EXPORT i2c()
BEGIN
RETURN "i2c(2i + 2) >> [2, 2]";
END; 

Export i2am(ic)
BEGIN
LOCAL POLAR,ANGLE,MAG,VEC;
POLAR:=polar_coordinates(ic);
ANGLE:=POLAR[2];
MAG:=POLAR[1];
VEC:={ANGLE,MAG};
RETURN VEC;
END;

EXPORT i2am()
BEGIN
RETURN "i2c(2i + 2) >> {Θ, Magnitude}";
END; 
 
 
