cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=4f0f81bb30f33b8e5f72008c2cf2ef438d5283e6
commit 4f0f81bb30f33b8e5f72008c2cf2ef438d5283e6 Author: Cedric BAIL <ced...@osg.samsung.com> Date: Wed Jun 24 16:56:26 2015 +0200 eina: add eina_matrix4_determinant. --- src/lib/eina/eina_matrix.c | 30 ++++++++++++++++++++++++++++++ src/lib/eina/eina_matrix.h | 13 +++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/lib/eina/eina_matrix.c b/src/lib/eina/eina_matrix.c index 6c96893..2e994df 100644 --- a/src/lib/eina/eina_matrix.c +++ b/src/lib/eina/eina_matrix.c @@ -693,3 +693,33 @@ eina_matrix3_matrix4_to(Eina_Matrix4 *m4, const Eina_Matrix3 *m3) MATRIX_WZ(m4) = 0; MATRIX_WW(m4) = MATRIX_ZZ(m3); } + +EAPI double +eina_matrix4_determinant(const Eina_Matrix4 *m) +{ + return + MATRIX_XW(m) * MATRIX_YZ(m) * MATRIX_ZY(m) * MATRIX_WX(m) + - MATRIX_XZ(m) * MATRIX_YW(m) * MATRIX_ZY(m) * MATRIX_WX(m) + - MATRIX_XW(m) * MATRIX_YY(m) * MATRIX_ZZ(m) * MATRIX_WX(m) + + MATRIX_XY(m) * MATRIX_YW(m) * MATRIX_ZZ(m) * MATRIX_WX(m) + + MATRIX_XZ(m) * MATRIX_YY(m) * MATRIX_ZW(m) * MATRIX_WX(m) + - MATRIX_XY(m) * MATRIX_YZ(m) * MATRIX_ZW(m) * MATRIX_WX(m) + - MATRIX_XW(m) * MATRIX_YZ(m) * MATRIX_ZX(m) * MATRIX_WY(m) + + MATRIX_XZ(m) * MATRIX_YW(m) * MATRIX_ZX(m) * MATRIX_WY(m) + + MATRIX_XW(m) * MATRIX_YX(m) * MATRIX_ZZ(m) * MATRIX_WY(m) + - MATRIX_XX(m) * MATRIX_YW(m) * MATRIX_ZZ(m) * MATRIX_WY(m) + - MATRIX_XZ(m) * MATRIX_YX(m) * MATRIX_ZW(m) * MATRIX_WY(m) + + MATRIX_XX(m) * MATRIX_YZ(m) * MATRIX_ZW(m) * MATRIX_WY(m) + + MATRIX_XW(m) * MATRIX_YY(m) * MATRIX_ZX(m) * MATRIX_WZ(m) + - MATRIX_XY(m) * MATRIX_YW(m) * MATRIX_ZX(m) * MATRIX_WZ(m) + - MATRIX_XW(m) * MATRIX_YX(m) * MATRIX_ZY(m) * MATRIX_WZ(m) + + MATRIX_XX(m) * MATRIX_YW(m) * MATRIX_ZY(m) * MATRIX_WZ(m) + + MATRIX_XY(m) * MATRIX_YX(m) * MATRIX_ZW(m) * MATRIX_WZ(m) + - MATRIX_XX(m) * MATRIX_YY(m) * MATRIX_ZW(m) * MATRIX_WZ(m) + - MATRIX_XZ(m) * MATRIX_YY(m) * MATRIX_ZX(m) * MATRIX_WW(m) + + MATRIX_XY(m) * MATRIX_YZ(m) * MATRIX_ZX(m) * MATRIX_WW(m) + + MATRIX_XZ(m) * MATRIX_YX(m) * MATRIX_ZY(m) * MATRIX_WW(m) + - MATRIX_XX(m) * MATRIX_YZ(m) * MATRIX_ZY(m) * MATRIX_WW(m) + - MATRIX_XY(m) * MATRIX_YX(m) * MATRIX_ZZ(m) * MATRIX_WW(m) + + MATRIX_XX(m) * MATRIX_YY(m) * MATRIX_ZZ(m) * MATRIX_WW(m); +} diff --git a/src/lib/eina/eina_matrix.h b/src/lib/eina/eina_matrix.h index 83fff16..8dc7014 100644 --- a/src/lib/eina/eina_matrix.h +++ b/src/lib/eina/eina_matrix.h @@ -512,6 +512,19 @@ EAPI void eina_matrix4_values_get(const Eina_Matrix4 *m, double *wx, double *wy, double *wz, double *ww); /** + * @brief Return the determinant of the given matrix. + * + * @param m The matrix. + * @return The determinant. + * + * This function returns the determinant of the matrix @p m. No check + * is done on @p m. + * + * @since 1.15 + */ +EAPI double eina_matrix4_determinant(const Eina_Matrix4 *m); + +/** * @brief Convert an Eina_Matrix4 into an Eina_Matrix3. * * @param m3 The destination Eina_Matrix3. --