sanyaade-g2g-repos / quimeraengine

Automatically exported from code.google.com/p/quimeraengine
0 stars 1 forks source link

Reorganización de SQAngle::Truncate- #262

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Por un lado, hay que unificar los métodos SQAngle::TruncateDegrees y 
SQAngle::TruncateRadians en uno que discrimine internamente entre grados y 
radianes, como hacen los demás, y que se llamará "Truncate". Por otro lado, 
la funcionalidad cambia, ahora se restará al ángulo de entrada un valor igual 
a las revoluciones completas que represente, es decir, por ejemplo, si usamos 
grados:

405º --> 45º
360º --> 0º
-361 --> -1º

El resultado estará siempre en el rango (-360, +360).

Importante: Hay que revisar y modificar los unit tests existentes para los 
métodos antiguos.

Original issue reported on code.google.com by Lince3D@gmail.com on 3 May 2012 at 9:05

GoogleCodeExporter commented 8 years ago
Pillada

Original comment by borderpa...@gmail.com on 8 May 2012 at 1:52

GoogleCodeExporter commented 8 years ago
Se ha implementado una primera versión que utiliza las funciones fmod(double, 
double) y fmodf(float, float) de la biblioteca estándar. Esto, en principio, 
debe ofrecer mayor compatibilidad que la sobrecarga fmod(float, float). Se ha 
probado con Visual C++ y GCC.
En cuanto al unit test, se han adaptado todas las pruebas a la nueva 
funcionalidad y renombrado los casos de prueba.
Evidentemente, fallan los casos de prueba configurados para el formato de 
ángulo distinto al actual. Además de eso, se ha encontrado el siguiente 
problema de precisión en 
Truncate_AnglesGreaterThan2PiAreCorrectlyTruncated_Test:
<![CDATA[check fResultUT == EXPECTED_VALUE failed [0.785398006 != 
0.785398185]]]>
¿Sería aceptable?

Original comment by borderpa...@gmail.com on 9 May 2012 at 4:15

GoogleCodeExporter commented 8 years ago
Resultado de la revisión:

-Sería mejor llevarse a fmod a MathDefinitions.h, y crear una macro llamada 
fmod_q, al estilo de las demás, para que escoja uina sobrecarga en función 
del flag de precisión.

-Los tests deben funcionar sea cual sea la configuración del motor, igual que 
el resto del código. En este caso, deberá funcionar tanto si está cofigurado 
para usar grados como para radianes (hay muchos ejemplos en los demás tests 
que hacen uso del preprocesador para elegir los valores según el caso).

-Para solventar la pérdida de precisión propia de los tipos de coma flotante, 
utilizamos la clase SQFloat.

Original comment by Lince3D@gmail.com on 9 May 2012 at 7:40

GoogleCodeExporter commented 8 years ago
-Implementada la macro fmod_q en MathDefinitions.h
-Reescritos y reenombrados los test para hacerlos independientes al valor de 
configuración de ángulos. Lista completa:

Truncate_FullRevolutionPositiveAngleIsTruncatedToZero_Test
Truncate_FullRevolutionNegativeAngleIsTruncatedToZero_Test
Truncate_PositiveAnglesGreaterThanFullRevolutionPositiveAngleAreCorrectlyTruncat
ed_Test
Truncate_NegativeAnglesLowerThanFullRevolutionNegativeAngleAreCorrectlyTruncated
_Test
Truncate_AnglesLowerThanFullRevolutionPositiveAngleAreNotTruncated_Test
Truncate_AnglesGreaterThanFullRevolutionNegativeAngleAreNotTruncated_Test

-Chequeo de la precisión mediante SQFloat::AreEquals en los tests que lo 
requieren

Original comment by borderpa...@gmail.com on 10 May 2012 at 12:21

GoogleCodeExporter commented 8 years ago
Resultado de la revisión: Correcta.

-Sobra el include de <math.h> en SQAngle.

Original comment by Lince3D@gmail.com on 10 May 2012 at 7:48

GoogleCodeExporter commented 8 years ago
OK. Además, si te parece, voy a cambiar el nombre a los dos últimos test para 
mantener el estilo de nombre con los anteriores. Los nuevos nombres serían 
estos:
Truncate_PositiveAnglesLowerThanFullRevolutionPositiveAngleAreNotTruncated_Test
Truncate_NegativeAnglesGreaterThanFullRevolutionNegativeAngleAreNotTruncated_Tes
t

Original comment by borderpa...@gmail.com on 10 May 2012 at 9:59