diff --git a/src/lib/eina/eina_matrix.c b/src/lib/eina/eina_matrix.c index 1c848f3e98..ad7cdb03ff 100644 --- a/src/lib/eina/eina_matrix.c +++ b/src/lib/eina/eina_matrix.c @@ -542,7 +542,15 @@ EAPI void eina_matrix3_rotate(Eina_Matrix3 *m, double rad) { double c, s; -#if 0 + + /* Note: Local functions do not guarantee accuracy. + * Errors occur in the calculation of very small or very large numbers. + * Local cos and sin functions differ from the math header cosf and sinf functions + * by result values. The 4th decimal place is different. + * But local functions are certainly faster than functions in math library. + * Later we would want someone to look at this and improve accuracy. + */ +#if 1 c = cosf(rad); s = sinf(rad); #else diff --git a/src/tests/eina/eina_test_matrix.c b/src/tests/eina/eina_test_matrix.c index 1d54f21e3f..ac3afa827f 100644 --- a/src/tests/eina/eina_test_matrix.c +++ b/src/tests/eina/eina_test_matrix.c @@ -400,6 +400,7 @@ EFL_START_TEST(eina_matrix3_operations) zx, zy, zz; double tx = 20, ty = 30, ret; const double arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1}; + double rotate_radian = 45.0 * M_PI / 180.0; eina_matrix3_values_set(&m1, 1, 0, 0, @@ -458,13 +459,12 @@ EFL_START_TEST(eina_matrix3_operations) 1, 0, 0, 0, 1, 0, 0, 0, 1); - eina_matrix3_rotate(&m1, M_PI/2); - - fail_if (!MATRIX3_CMP(round(m1.xx), round(m1.xy), round(m1.xz), - round(m1.yx), round(m1.yy), round(m1.yz), - round(m1.zx), round(m1.zy), round(m1.zz), - 0, -1, 0, - 1, 0, 0, + eina_matrix3_rotate(&m1, rotate_radian); + fail_if (!MATRIX3_CMP(m1.xx, m1.xy, m1.xz, + m1.yx, m1.yy, m1.yz, + m1.zx, m1.zy, m1.zz, + cosf(rotate_radian), -sinf(rotate_radian), 0, + sinf(rotate_radian), cosf(rotate_radian), 0, 0, 0, 1)); eina_matrix3_values_set(&m1,