forked from enlightenment/efl
Eina_Matrix : Use math header for cosf and sinf of rotate function.
The local cos and sin functions differ from the math header cos and sin functions by result values The 4th decimal place is different. Computing large numbers can cause errors. Reviewed-by: Cedric BAIL <cedric.bail@free.fr> Differential Revision: https://phab.enlightenment.org/D10467
This commit is contained in:
parent
f6b066df2a
commit
3493a37db8
|
@ -542,7 +542,15 @@ EAPI void
|
||||||
eina_matrix3_rotate(Eina_Matrix3 *m, double rad)
|
eina_matrix3_rotate(Eina_Matrix3 *m, double rad)
|
||||||
{
|
{
|
||||||
double c, s;
|
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);
|
c = cosf(rad);
|
||||||
s = sinf(rad);
|
s = sinf(rad);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -400,6 +400,7 @@ EFL_START_TEST(eina_matrix3_operations)
|
||||||
zx, zy, zz;
|
zx, zy, zz;
|
||||||
double tx = 20, ty = 30, ret;
|
double tx = 20, ty = 30, ret;
|
||||||
const double arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1};
|
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,
|
eina_matrix3_values_set(&m1,
|
||||||
1, 0, 0,
|
1, 0, 0,
|
||||||
|
@ -458,13 +459,12 @@ EFL_START_TEST(eina_matrix3_operations)
|
||||||
1, 0, 0,
|
1, 0, 0,
|
||||||
0, 1, 0,
|
0, 1, 0,
|
||||||
0, 0, 1);
|
0, 0, 1);
|
||||||
eina_matrix3_rotate(&m1, M_PI/2);
|
eina_matrix3_rotate(&m1, rotate_radian);
|
||||||
|
fail_if (!MATRIX3_CMP(m1.xx, m1.xy, m1.xz,
|
||||||
fail_if (!MATRIX3_CMP(round(m1.xx), round(m1.xy), round(m1.xz),
|
m1.yx, m1.yy, m1.yz,
|
||||||
round(m1.yx), round(m1.yy), round(m1.yz),
|
m1.zx, m1.zy, m1.zz,
|
||||||
round(m1.zx), round(m1.zy), round(m1.zz),
|
cosf(rotate_radian), -sinf(rotate_radian), 0,
|
||||||
0, -1, 0,
|
sinf(rotate_radian), cosf(rotate_radian), 0,
|
||||||
1, 0, 0,
|
|
||||||
0, 0, 1));
|
0, 0, 1));
|
||||||
|
|
||||||
eina_matrix3_values_set(&m1,
|
eina_matrix3_values_set(&m1,
|
||||||
|
|
Loading…
Reference in New Issue