func real VAdd(A, B, C); \Add two 2D vectors real A, B, C; \A:= B + C [A(0):= B(0) + C(0); \VAdd(A, A, C) => A:= A + C A(1):= B(1) + C(1); return A; ]; func real VSub(A, B, C); \Subtract two 2D vectors real A, B, C; \A:= B - C [A(0):= B(0) - C(0); \VSub(A, A, C) => A:= A - C A(1):= B(1) - C(1); return A; ]; func real VMul(A, B, S); \Multiply 2D vector by a scalar real A, B, S; \A:= B * S [A(0):= B(0) * S; \VMul(A, A, S) => A:= A * S A(1):= B(1) * S; return A; ]; func real VDiv(A, B, S); \Divide 2D vector by a scalar real A, B, S; \A:= B / S [A(0):= B(0) / S; \VDiv(A, A, S) => A:= A / S A(1):= B(1) / S; return A; ]; proc VOut(Dev, A); \Output a 2D vector number to specified device int Dev; real A; \e.g: Format(1,1); (-1.5, 0.3) [ChOut(Dev, ^(); RlOut(Dev, A(0)); Text(Dev, ", "); RlOut(Dev, A(1)); ChOut(Dev, ^)); ]; proc Polar2Rect(@X, @Y, Ang, Dist); \Return rectangular coordinates real X, Y, Ang, Dist; [X(0):= Dist*Cos(Ang); Y(0):= Dist*Sin(Ang); ]; \Polar2Rect real V0(2), V1, V2, V3(2); def Pi = 3.14159265358979323846; [Format(1, 1); V1:= [5., 7.]; V2:= [2., 3.]; Polar2Rect(@V3(0), @V3(1), Pi/4., sqrt(2.)); Text(0, "V1 = "); VOut(0, V1); CrLf(0); Text(0, "V2 = "); VOut(0, V2); CrLf(0); Text(0, "V3 = "); VOut(0, V3); CrLf(0); CrLf(0); Text(0, "V1 + V2 = "); VOut(0, VAdd(V0, V1, V2 )); CrLf(0); Text(0, "V1 - V2 = "); VOut(0, VSub(V0, V1, V2 )); CrLf(0); Text(0, "V1 * 11 = "); VOut(0, VMul(V0, V1, 11.)); CrLf(0); Text(0, "11 * V2 = "); VOut(0, VMul(V0, V2, 11.)); CrLf(0); Text(0, "V1 / 2 = "); VOut(0, VDiv(V0, V1, 2. )); CrLf(0); ]