Vecmat 0.2.3
C math and linear algebra library for 2D/3D graphics, physics, and science.
Loading...
Searching...
No Matches
matrix3i_ptr.c
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025-2026 Igal Alkon
2// SPDX-FileCopyrightText: 2026 ALKONTEK <git@alkontek.com>
3// SPDX-License-Identifier: BSD-3-Clause
4
5#include <vecmat.h>
6
13{
14 res->m11 = 1; res->m12 = 0; res->m13 = 0;
15 res->m21 = 0; res->m22 = 1; res->m23 = 0;
16 res->m31 = 0; res->m32 = 0; res->m33 = 1;
17}
18
26void mat3i_mul_ptr(matrix3i *res, const matrix3i *a, const matrix3i *b)
27{
28 matrix3i temp;
29 temp.m11 = a->m11 * b->m11 + a->m12 * b->m21 + a->m13 * b->m31;
30 temp.m12 = a->m11 * b->m12 + a->m12 * b->m22 + a->m13 * b->m32;
31 temp.m13 = a->m11 * b->m13 + a->m12 * b->m23 + a->m13 * b->m33;
32
33 temp.m21 = a->m21 * b->m11 + a->m22 * b->m21 + a->m23 * b->m31;
34 temp.m22 = a->m21 * b->m12 + a->m22 * b->m22 + a->m23 * b->m32;
35 temp.m23 = a->m21 * b->m13 + a->m22 * b->m23 + a->m23 * b->m33;
36
37 temp.m31 = a->m31 * b->m11 + a->m32 * b->m21 + a->m33 * b->m31;
38 temp.m32 = a->m31 * b->m12 + a->m32 * b->m22 + a->m33 * b->m32;
39 temp.m33 = a->m31 * b->m13 + a->m32 * b->m23 + a->m33 * b->m33;
40
41 *res = temp;
42}
43
51{
52 matrix3i temp;
53 temp.m11 = m->m11; temp.m12 = m->m21; temp.m13 = m->m31;
54 temp.m21 = m->m12; temp.m22 = m->m22; temp.m23 = m->m32;
55 temp.m31 = m->m13; temp.m32 = m->m23; temp.m33 = m->m33;
56 *res = temp;
57}
58
68{
69 const vm_int_t det = mat3i_determinant(*m);
70 if (det == 0) {
72 return;
73 }
74
75 matrix3i temp;
76 temp.m11 = (m->m22 * m->m33 - m->m23 * m->m32) / det;
77 temp.m12 = (m->m13 * m->m32 - m->m12 * m->m33) / det;
78 temp.m13 = (m->m12 * m->m23 - m->m13 * m->m22) / det;
79
80 temp.m21 = (m->m23 * m->m31 - m->m21 * m->m33) / det;
81 temp.m22 = (m->m11 * m->m33 - m->m13 * m->m31) / det;
82 temp.m23 = (m->m13 * m->m21 - m->m11 * m->m23) / det;
83
84 temp.m31 = (m->m21 * m->m32 - m->m22 * m->m31) / det;
85 temp.m32 = (m->m12 * m->m31 - m->m11 * m->m32) / det;
86 temp.m33 = (m->m11 * m->m22 - m->m12 * m->m21) / det;
87
88 *res = temp;
89}
90
98void mat3i_mul_vec3i_ptr(vector3i *res, const matrix3i *m, const vector3i *v)
99{
100 const vm_int_t x = v->x;
101 const vm_int_t y = v->y;
102 const vm_int_t z = v->z;
103 res->x = m->m11 * x + m->m12 * y + m->m13 * z;
104 res->y = m->m21 * x + m->m22 * y + m->m23 * z;
105 res->z = m->m31 * x + m->m32 * y + m->m33 * z;
106}
107
115void mat3i_mul_vec2i_ptr(vector2i *res, const matrix3i *m, const vector2i *v)
116{
117 const vm_int_t x = v->x;
118 const vm_int_t y = v->y;
119 res->x = m->m11 * x + m->m12 * y + m->m13;
120 res->y = m->m21 * x + m->m22 * y + m->m23;
121}
void mat3i_mul_ptr(matrix3i *res, const matrix3i *a, const matrix3i *b)
Multiplies two 3x3 integer matrices (standard matrix multiplication).
void mat3i_inverse_ptr(matrix3i *res, const matrix3i *m)
Computes the inverse of a 3x3 integer matrix using adjugate over determinant.
void mat3i_mul_vec2i_ptr(vector2i *res, const matrix3i *m, const vector2i *v)
Applies a 3x3 integer affine transform to a vector2i.
void mat3i_identity_ptr(matrix3i *res)
Fills the given 3x3 integer matrix with the identity matrix.
void mat3i_mul_vec3i_ptr(vector3i *res, const matrix3i *m, const vector3i *v)
Multiplies a 3x3 integer matrix by a vector3i.
void mat3i_transpose_ptr(matrix3i *res, const matrix3i *m)
Computes the transpose of a 3x3 integer matrix.
vm_int_t m11
Definition vecmat.h:309
vm_int_t m13
Definition vecmat.h:315
vm_int_t m23
Definition vecmat.h:316
vm_int_t m31
Definition vecmat.h:311
vm_int_t m21
Definition vecmat.h:310
vm_int_t m33
Definition vecmat.h:317
vm_int_t m32
Definition vecmat.h:314
vm_int_t m22
Definition vecmat.h:313
vm_int_t m12
Definition vecmat.h:312
vm_int_t y
Definition vecmat.h:165
vm_int_t x
Definition vecmat.h:164
vm_int_t x
Definition vecmat.h:174
vm_int_t y
Definition vecmat.h:175
vm_int_t z
Definition vecmat.h:176
vm_int_t mat3i_determinant(matrix3i m)
Computes the determinant of a 3x3 integer matrix.
Definition matrix3i.c:58
int8_t vm_int_t
Definition vecmat.h:103