60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
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);
|
|
]
|