xplshn
·
2025-08-13
matrixMath.bx
Bx
1extrn printf;
2
3void print_vec(label string, v []int) {
4 printf("%s: [%d, %d]\n", label, v[0], v[1]);
5}
6
7void print_mat(label string, m []int) {
8 printf("%s: [[%d, %d], [%d, %d]]\n", label, m[0], m[1], m[2], m[3]);
9}
10
11void vec_add(v1, v2, out_v []int) {
12 out_v[0] = v1[0] + v2[0];
13 out_v[1] = v1[1] + v2[1];
14}
15
16int vec_dot(v1, v2 []int) {
17 //return (v1[0] * v2[0]) + (v1[1] * v2[1]);
18 return ((v1[0] * v2[0]) + (v1[1] * v2[1]));
19}
20
21void mat_vec_mult(m, v, out_v []int) {
22 out_v[0] = (m[0] * v[0]) + (m[1] * v[1]);
23 out_v[1] = (m[2] * v[0]) + (m[3] * v[1]);
24}
25
26void mat_mult(m1, m2, out_m []int) {
27 out_m[0] = (m1[0] * m2[0]) + (m1[1] * m2[2]);
28 out_m[1] = (m1[0] * m2[1]) + (m1[1] * m2[3]);
29 out_m[2] = (m1[2] * m2[0]) + (m1[3] * m2[2]);
30 out_m[3] = (m1[2] * m2[1]) + (m1[3] * m2[3]);
31}
32
33int main() {
34 int vec_a[2];
35 int vec_b[2];
36 int vec_result[2];
37 int dot_product;
38
39 int matrix_T[4];
40 int matrix_R[4];
41 int matrix_TR[4];
42
43 printf("--- Vector & Matrix Math Demo ---\n");
44
45 vec_a[0] = 3; vec_a[1] = 5;
46 vec_b[0] = -2; vec_b[1] = 4;
47 print_vec("Vector A", vec_a);
48 print_vec("Vector B", vec_b);
49
50 printf("\n--- Vector Operations ---\n");
51 vec_add(vec_a, vec_b, vec_result);
52 print_vec("A + B", vec_result);
53
54 dot_product = vec_dot(vec_a, vec_b);
55 printf("A . B: %d\n", dot_product);
56
57 printf("\n--- Matrix Operations ---\n");
58
59 matrix_R[0] = 0; matrix_R[1] = 1;
60 matrix_R[2] = -1; matrix_R[3] = 0;
61 print_mat("Rotation Matrix R", matrix_R);
62
63 matrix_T[0] = 2; matrix_T[1] = 0;
64 matrix_T[2] = 0; matrix_T[3] = 3;
65 print_mat("Scaling Matrix T", matrix_T);
66
67 mat_vec_mult(matrix_R, vec_a, vec_result);
68 print_vec("R * A", vec_result);
69
70 mat_mult(matrix_T, matrix_R, matrix_TR);
71 print_mat("T * R", matrix_TR);
72
73 mat_vec_mult(matrix_TR, vec_b, vec_result);
74 print_vec("(T * R) * B", vec_result);
75
76 return (0);
77}