forked from enlightenment/efl
eina: add eina_matrix4_determinant.
This commit is contained in:
parent
c82015d062
commit
4f0f81bb30
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -511,6 +511,19 @@ EAPI void eina_matrix4_values_get(const Eina_Matrix4 *m,
|
|||
double *zx, double *zy, double *zz, double *zw,
|
||||
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.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue