diff --git a/src/matrix/2x2matrix.c b/src/matrix/2x2matrix.c new file mode 100644 index 0000000000000000000000000000000000000000..084b80288cd7836a0b09d89f4b016a1840eee71a --- /dev/null +++ b/src/matrix/2x2matrix.c @@ -0,0 +1,70 @@ +#include "2x2matrix.h" + +_2x2Matrix add_2x2(_2x2Matrix m1, _2x2Matrix m2){ + _2x2Matrix ma = { + m1.a11 + m2.a11,m1.a12 + m2.a12, + m1.a21 + m2.a21,m1.a22 + m2.a22 + }; + + return ma; +} + +_2x2Matrix minus_2x2(_2x2Matrix m1, _2x2Matrix m2){ + _2x2Matrix ma = { + m1.a11 - m2.a11,m1.a12 - m2.a12, + m1.a21 - m2.a21,m1.a22 - m2.a22 + }; + + return ma; +} + +_2x2Matrix multiply_2x2(_2x2Matrix m1, _2x2Matrix m2){ + _2x2Matrix ma = { + (m1.a12 * m2.a21) + (m1.a11 * m2.a11),(m1.a11 * m2.a12) + (m1.a12 * m2.a22), + (m1.a22 * m2.a21) + (m1.a21 * m2.a11),(m1.a21 * m2.a12) + (m1.a22 * m2.a22) + }; + + return ma; +} + +_2x2Matrix scale_2x2(_2x2Matrix m1, float scale) { + _2x2Matrix ma = { + m1.a11 * scale,m1.a12 * scale, + m1.a21 * scale,m1.a22 * scale + }; + + return ma; +} + +float det_2x2(_2x2Matrix m){ + return (m.a11 * m.a22) - (m.a12 * m.a21); +} + +_2x2Matrix inverse_2x2(_2x2Matrix m){ + float detM = det_2x2(m); + if(detM != 0){ + _2x2Matrix specMat = {m.a22, -m.a12, + -m.a21, m.a11}; + return scale_2x2(specMat, 1.0/detM); + } + _2x2Matrix badM = {1.0f,1.0f,1.0f,1.0f}; + return badM; +} + +_2x1Matrix transpose_2x2(_2x2Matrix m1, _2x1Matrix m2){ + _2x1Matrix ma = { + (m1.a12*m2.a21) + (m1.a11*m2.a11), + (m1.a22*m2.a21) + (m1.a21*m2.a11) + }; + + return ma; +} + +unsigned char equals_2x2(_2x2Matrix m1, _2x2Matrix m2) { + if(m1.a11 == m2.a11 + && m1.a12 == m2.a12 + && m1.a21 == m2.a21 + && m1.a22 == m2.a22) + return 42; + return 0; +}