Example #1
0
void matrix_3x3_transpose(math_matrix_3x3 *out, const math_matrix_3x3 *in)
{
   math_matrix_3x3 mat;
   for (unsigned i = 0; i < 3; i++)
      for (unsigned j = 0; j < 3; j++)
         MAT_ELEM_3X3(mat, j, i) = MAT_ELEM_3X3(*in, i, j);

   *out = mat;
}
Example #2
0
float matrix_3x3_determinant(const math_matrix_3x3 *mat)
{
   float det = MAT_ELEM_3X3(*mat, 0, 0) * (MAT_ELEM_3X3(*mat, 1, 1) * MAT_ELEM_3X3(*mat, 2, 2) - MAT_ELEM_3X3(*mat, 1, 2) * MAT_ELEM_3X3(*mat, 2, 1));
   det      -= MAT_ELEM_3X3(*mat, 0, 1) * (MAT_ELEM_3X3(*mat, 1, 0) * MAT_ELEM_3X3(*mat, 2, 2) - MAT_ELEM_3X3(*mat, 1, 2) * MAT_ELEM_3X3(*mat, 2, 0));
   det      += MAT_ELEM_3X3(*mat, 0, 2) * (MAT_ELEM_3X3(*mat, 1, 0) * MAT_ELEM_3X3(*mat, 2, 1) - MAT_ELEM_3X3(*mat, 1, 1) * MAT_ELEM_3X3(*mat, 2, 0));

   return det;
}
Example #3
0
void matrix_3x3_divide_scalar(math_matrix_3x3 *mat, const float s)
{
   unsigned i, j;
   for (i = 0; i < 3; i++)
      for (j = 0; j < 3; j++)
         MAT_ELEM_3X3(*mat, i, j) /= s;
}
Example #4
0
void matrix_3x3_identity(math_matrix_3x3 *mat)
{
   unsigned i;

   memset(mat, 0, sizeof(*mat));
   for (i = 0; i < 3; i++)
      MAT_ELEM_3X3(*mat, i, i) = 1.0f;
}
Example #5
0
void matrix_3x3_multiply(math_matrix_3x3 *out,
      const math_matrix_3x3 *a, const math_matrix_3x3 *b)
{
   math_matrix_3x3 mat;
   for (unsigned r = 0; r < 3; r++)
   {
      for (unsigned c = 0; c < 3; c++)
      {
         float dot = 0.0f;
         for (unsigned k = 0; k < 3; k++)
            dot += MAT_ELEM_3X3(*a, r, k) * MAT_ELEM_3X3(*b, k, c);
         MAT_ELEM_3X3(mat, r, c) = dot;
      }
   }

   *out = mat;
}
Example #6
0
void matrix_3x3_inits(math_matrix_3x3 *mat,
                      const float n11, const float n12, const float n13,
                      const float n21, const float n22, const float n23,
                      const float n31, const float n32, const float n33)
{
   MAT_ELEM_3X3(*mat, 0, 0) = n11;
   MAT_ELEM_3X3(*mat, 0, 1) = n12;
   MAT_ELEM_3X3(*mat, 0, 2) = n13;
   MAT_ELEM_3X3(*mat, 1, 0) = n21;
   MAT_ELEM_3X3(*mat, 1, 1) = n22;
   MAT_ELEM_3X3(*mat, 1, 2) = n23;
   MAT_ELEM_3X3(*mat, 2, 0) = n31;
   MAT_ELEM_3X3(*mat, 2, 1) = n32;
   MAT_ELEM_3X3(*mat, 2, 2) = n33;
}
Example #7
0
void matrix_3x3_adjoint(math_matrix_3x3 *mat)
{
   math_matrix_3x3 out;

   MAT_ELEM_3X3(out, 0, 0) =  (MAT_ELEM_3X3(*mat, 1, 1) * MAT_ELEM_3X3(*mat, 2, 2) - MAT_ELEM_3X3(*mat, 1, 2) * MAT_ELEM_3X3(*mat, 2, 1));
   MAT_ELEM_3X3(out, 0, 1) = -(MAT_ELEM_3X3(*mat, 0, 1) * MAT_ELEM_3X3(*mat, 2, 2) - MAT_ELEM_3X3(*mat, 0, 2) * MAT_ELEM_3X3(*mat, 2, 1));
   MAT_ELEM_3X3(out, 0, 2) =  (MAT_ELEM_3X3(*mat, 0, 1) * MAT_ELEM_3X3(*mat, 1, 1) - MAT_ELEM_3X3(*mat, 0, 2) * MAT_ELEM_3X3(*mat, 1, 1));
   MAT_ELEM_3X3(out, 1, 0) = -(MAT_ELEM_3X3(*mat, 1, 0) * MAT_ELEM_3X3(*mat, 2, 2) - MAT_ELEM_3X3(*mat, 1, 2) * MAT_ELEM_3X3(*mat, 2, 0));
   MAT_ELEM_3X3(out, 1, 1) =  (MAT_ELEM_3X3(*mat, 0, 0) * MAT_ELEM_3X3(*mat, 2, 2) - MAT_ELEM_3X3(*mat, 0, 2) * MAT_ELEM_3X3(*mat, 2, 0));
   MAT_ELEM_3X3(out, 1, 2) = -(MAT_ELEM_3X3(*mat, 0, 0) * MAT_ELEM_3X3(*mat, 1, 2) - MAT_ELEM_3X3(*mat, 0, 2) * MAT_ELEM_3X3(*mat, 1, 0));
   MAT_ELEM_3X3(out, 2, 0) =  (MAT_ELEM_3X3(*mat, 1, 0) * MAT_ELEM_3X3(*mat, 2, 1) - MAT_ELEM_3X3(*mat, 1, 1) * MAT_ELEM_3X3(*mat, 2, 0));
   MAT_ELEM_3X3(out, 2, 1) = -(MAT_ELEM_3X3(*mat, 0, 0) * MAT_ELEM_3X3(*mat, 2, 1) - MAT_ELEM_3X3(*mat, 0, 1) * MAT_ELEM_3X3(*mat, 2, 0));
   MAT_ELEM_3X3(out, 2, 2) =  (MAT_ELEM_3X3(*mat, 0, 0) * MAT_ELEM_3X3(*mat, 1, 1) - MAT_ELEM_3X3(*mat, 0, 1) * MAT_ELEM_3X3(*mat, 1, 0));

   *mat = out;
}