User Tag List

Página 1 de 3 123 ÚltimoÚltimo
Resultados 1 al 15 de 37

Tema: Libreria de matematicas en punto fijo

  1. #1

    Fecha de ingreso
    Jun 2004
    Ubicación
    Valencia
    Mensajes
    415
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts

    Libreria de matematicas en punto fijo

    Ahi teneis una pequeña lib de Fixed Point :3

    Si quereis usar variables de 64 bits (long long), definid USE_64_BITS. No es 100% precisa pero rula bastante bien :3

    /* File : fixed.h
    * Autor : Damizean
    * Description : Header for the fixed-point maths library.
    * Last update : 14 / 08 / 2005
    */

    #ifndef FIXED_H
    #define FIXED_H

    //--- Declarations -------------------------
    #ifdef USE_64_BITS
    #define fixed long long
    #define fixedshifts 24
    #else
    #define fixed long
    #define fixedshifts 12
    #endif

    extern fixed MATHS_PI; // 3.1415863037109375
    extern fixed MATHS_PI_OVER_2; // 1.57079315185546875
    extern fixed MATHS_E; // 2.7182769775390625

    extern fixed MATHS_SINK1; // 0.007598876953125
    extern fixed MATHS_SINK2; // 0.166046142578125

    extern fixed MATHS_COSK1; // 0.0355224609375
    extern fixed MATHS_COSK2; // 0.4966888427734375

    extern fixed MATHS_TANK1; // 0.2032928466796875
    extern fixed MATHS_TANK2; // 0.317535400390625


    //--- Methods ------------------------------
    void maths_init ();

    fixed int_to_fixed ( int value );
    fixed float_to_fixed ( float value );
    fixed double_to_fixed ( double value );

    int fixed_to_int ( fixed value );
    float fixed_to_float ( fixed value );
    double fixed_to_double ( fixed value );

    fixed fixed_add ( fixed pFixed1, fixed pFixed2 );
    fixed fixed_sub ( fixed pFixed1, fixed pFixed2 );
    fixed fixed_mul ( fixed pFixed1, fixed pFixed2 );
    fixed fixed_div ( fixed pFixed1, fixed pFixed2 );

    fixed fixed_degtorad ( fixed value );
    fixed fixed_radtodeg ( fixed value );

    fixed fixed_sin ( fixed value );
    fixed fixed_cos ( fixed value );
    fixed fixed_tan ( fixed value );
    fixed fixed_sqr ( fixed value );
    fixed fixed_sqrt ( fixed value );

    #endif /* FIXED_H */
    /* File : fixed.c
    * Autor : Damizean
    * Description : Fixed-point maths library.
    * Last update : 14 / 08 / 2005
    */

    #include "fixed.h"
    #include <math.h>

    // --- Define variables -----------------------------------------
    fixed MATHS_PI;
    fixed MATHS_PI_OVER_2;
    fixed MATHS_E;

    fixed MATHS_SINK1;
    fixed MATHS_SINK2;

    fixed MATHS_COSK1;
    fixed MATHS_COSK2;

    fixed MATHS_TANK1;
    fixed MATHS_TANK2;

    void maths_init ()
    {
    // --- Init math vars -------
    MATHS_PI = double_to_fixed ( 3.14159265f );
    MATHS_PI_OVER_2= double_to_fixed ( 1.57079 );
    MATHS_E = double_to_fixed ( 2.71827 );

    MATHS_SINK1 = double_to_fixed ( 0.00759 );
    MATHS_SINK2 = double_to_fixed ( 0.16604 );

    MATHS_COSK1 = double_to_fixed ( 0.03552 );
    MATHS_COSK2 = double_to_fixed ( 0.49668 );

    MATHS_TANK1 = double_to_fixed ( 0.20329 );
    MATHS_TANK2 = double_to_fixed ( 0.31753 );
    }

    // --- Convert variables to fixed point -------------------------
    fixed int_to_fixed ( int value )
    {
    return (fixed) ( value << fixedshifts );
    }

    fixed float_to_fixed ( float value )
    {
    return (fixed) ((float) value * ((fixed) 1 << fixedshifts ) );
    }

    fixed double_to_fixed ( double value )
    {
    return (fixed) ((double) value * ((fixed) 1 << fixedshifts ) );
    }

    // --- Convert fixed point to other variables -----------------
    int fixed_to_int ( fixed value )
    {
    return (int) ( value >> fixedshifts );
    }

    float fixed_to_float ( fixed value )
    {
    return ( (float) value / (float) ((fixed) 1 << fixedshifts ) );
    }

    double fixed_to_double ( fixed value )
    {
    return ( (double) value / (double) ((fixed) 1 << fixedshifts ) );
    }

    // --- Operations ---------------------------------------
    fixed fixed_add ( fixed pFixed1, fixed pFixed2 )
    {
    return ( pFixed1 + pFixed2 );
    }

    fixed fixed_sub ( fixed pFixed1, fixed pFixed2 )
    {
    return ( pFixed1 - pFixed2 );
    }

    fixed fixed_mul ( fixed pFixed1, fixed pFixed2 )
    {
    long long tmp;
    tmp = ((pFixed1 * pFixed2 ) >> fixedshifts);
    return (fixed) tmp;
    }

    fixed fixed_div ( fixed pFixed1, fixed pFixed2 )
    {
    long long tmp;
    tmp = (pFixed1 << fixedshifts) / pFixed2;
    return (fixed) tmp;
    }

    // --- Others -------------------------------------------
    fixed fixed_degtorad ( fixed value )
    {
    return fixed_mul( value, fixed_div( MATHS_PI,int_to_fixed( 180) ) );
    }

    fixed fixed_radtodeg ( fixed value )
    {
    return fixed_mul( value, fixed_div( int_to_fixed( 180 ), MATHS_PI ) );
    }

    fixed fixed_sin ( fixed value )
    {
    fixed sign, sqr, result;
    sign = 1;

    // ---- Set up the range ----------------------
    if ( (value > MATHS_PI_OVER_2 ) && ( value <= MATHS_PI ))
    {
    value = MATHS_PI - value;
    } else if ((value > MATHS_PI) && (value <= (MATHS_PI + MATHS_PI_OVER_2)))
    {
    value = value - MATHS_PI;
    sign = -1;
    } else if (value > (MATHS_PI + MATHS_PI_OVER_2))
    {
    value = (MATHS_PI<<1)-value;
    sign = -1;
    }

    // ----- Calculate ----------------------------
    sqr = fixed_sqr ( value );
    result = MATHS_SINK1;
    result = fixed_mul ( result, sqr );
    result -= MATHS_SINK2;
    result = fixed_mul ( result, sqr );
    result += (1 << fixedshifts);
    result = fixed_mul ( result, value );

    return sign * result;
    }

    fixed fixed_cos ( fixed value )
    {
    fixed sign, sqr, result;
    sign = 1;

    // ---- Set up the range ----------------------
    if ( (value > MATHS_PI_OVER_2 ) && ( value <= MATHS_PI ))
    {
    value = MATHS_PI - value;
    sign = -1;
    } else if ((value > MATHS_PI_OVER_2) && (value <= (MATHS_PI + MATHS_PI_OVER_2)))
    {
    value = value - MATHS_PI;
    sign = -1;
    } else if (value > (MATHS_PI + MATHS_PI_OVER_2))
    {
    value = (MATHS_PI<<1)-value;
    }

    // ----- Calculate ----------------------------
    sqr = fixed_sqr ( value );
    result = MATHS_COSK1;
    result = fixed_mul ( result, sqr );
    result -= MATHS_COSK2;
    result = fixed_mul ( result, sqr );
    result += (1 << fixedshifts);

    return sign * result;
    }

    fixed fixed_tan ( fixed value )
    {
    fixed sqr, result;
    sqr = fixed_sqr ( value );
    result = MATHS_TANK1;
    result = fixed_mul ( result, sqr );
    result += MATHS_TANK2;
    result = fixed_mul ( result, sqr );
    result += (1 << fixedshifts);
    result = fixed_mul ( result, value );
    return result;
    }

    fixed fixed_sqr ( fixed value )
    {
    return fixed_mul( value, value );
    }

    fixed fixed_sqrt ( fixed value )
    {
    fixed square = (value + (1 << fixedshifts) ) >> 1;
    int i;

    for ( i = 0; i < 8; i ++ )
    square = (square + fixed_div( value, square ) ) >> 1;
    return square;
    }
    3D Sonic Project - De vuelta a la vieja escuela. Demo técnica disponible.

  2. #2

    Fecha de ingreso
    Feb 2005
    Ubicación
    Malaga
    Mensajes
    5,305
    Mencionado
    77 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    2,750
    Agradecer Thanks Received 
    1,023
    Thanked in
    Agradecido 598 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    5
    Gracias
    Siempre vienen bien cosillas como estas.

    Un saludo

  3. #3

    Fecha de ingreso
    Aug 2004
    Ubicación
    en las nubes
    Mensajes
    1,027
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    The Damizean is your friend!!
    Gracias!
    .: kmkzk

  4. #4

    Fecha de ingreso
    Feb 2004
    Ubicación
    Madrid
    Mensajes
    8,513
    Mencionado
    30 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    191
    Agradecer Thanks Received 
    302
    Thanked in
    Agradecido 178 veces en [ARG:2 UNDEFINED] posts
    Parece interesante, qué tipo de cosas se pueden conseguir con esto?

  5. #5

    Fecha de ingreso
    Jun 2004
    Ubicación
    Valencia
    Mensajes
    415
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Perdon, se me olvidó decir que esta libreria esta directamente basada (y no terminada aun) en esta libreria de punto fijo para java: http://people.csail.mit.edu/hqm/imod...b/FP.java.html

    Y en cuanto a su utilidad, puede ser usada para hacer operaciones flotantes mucho más rapido que usando punto flotante, desde un juego 2D, hasta 3D o cualquier cosa.
    3D Sonic Project - De vuelta a la vieja escuela. Demo técnica disponible.

  6. #6

    Fecha de ingreso
    Feb 2005
    Ubicación
    Cádiz / Madrid
    Mensajes
    2,679
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Damizean
    Y en cuanto a su utilidad, puede ser usada para hacer operaciones flotantes mucho más rapido que usando punto flotante, desde un juego 2D, hasta 3D o cualquier cosa.
    A ver si la puedo probar con alguna cosa, si es que se me ocurre un ejemplo (fuera de la programación para GP32) para probar como de util podría ser tu librería, eso si, solo ver el codigo parece que como mínimo es interesante y completa

    Una sugerencia, aunque hayas basado en otra librería, si no es una copia ni una modificación propiamente dicha, es tuya, la puedes poner como si fuera de dominio público (como ahora) pero siempre queda mejor bajo alguna licencia libre, especificada en los comentarios, como esa de Java que indicas que está bajo la Licencia Artística, yo te recomendaría una como la LGPL que es mejor que usar GPL en el caso de las librerías

    .:: Yo, ya ni veo el código. Solo veo una rubia, una morena, una pelirroja... - Cifra (The Matrix) ::.

  7. #7

    Fecha de ingreso
    Jun 2004
    Ubicación
    Valencia
    Mensajes
    415
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Esta libreria y las librerias que tengo planeadas a hacer a continuacion van a estar lanzadas bajo licencia LGPL.

    Aunque me acabo de dar cuenta de que hay algunas mejoras que podria aplicar a la lib, así que Stay Tuned
    Última edición por Damizean; 22/08/2005 a las 00:50
    3D Sonic Project - De vuelta a la vieja escuela. Demo técnica disponible.

  8. #8

    Fecha de ingreso
    Jun 2003
    Ubicación
    Madrid
    Mensajes
    1,261
    Mencionado
    4 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    19
    Thanked in
    Agradecido 11 veces en [ARG:2 UNDEFINED] posts
    Yo uso estas... 64bit y en assembler de ARM, acelera un co-jon.
    Archivos adjuntados Archivos adjuntados

  9. #9

    Fecha de ingreso
    Apr 2003
    Ubicación
    Salamanca
    Mensajes
    5,347
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    35
    Thanked in
    Agradecido 29 veces en [ARG:2 UNDEFINED] posts
    Chui lo sabe!!!!!

  10. #10

    Fecha de ingreso
    Jun 2004
    Ubicación
    Valencia
    Mensajes
    415
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Wow, brutal
    3D Sonic Project - De vuelta a la vieja escuela. Demo técnica disponible.

  11. #11

    Fecha de ingreso
    Feb 2005
    Ubicación
    Cádiz / Madrid
    Mensajes
    2,679
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por chui
    Yo uso estas... 64bit y en assembler de ARM, acelera un co-jon.
    Ya que creo que tiene algo que ver por la utilidad que puede tener esta librería, Chui ¿podrías decirme en que estado de "usabilidad" está SDL-TinyGL? No lo he probado, solo lo pregunto como curiosidad, ya se que hasta que no salga el SDK y las primeras "unidades de desarrollo" de la GPX2 no sabremos como estará el tema de la programación en 3D, y si podríamos también usar algo como OpenGL ES (aunque solo se pueda con aceleración por software), que es lo más parecido actualmente a TinyGL para sistemas embebidos, con SDL. Hago esta pregunta simplemente porque me parece que sería interesante con vistas a usarlo para la GPX2.

    .:: Yo, ya ni veo el código. Solo veo una rubia, una morena, una pelirroja... - Cifra (The Matrix) ::.

  12. #12

    Fecha de ingreso
    Jun 2003
    Ubicación
    Madrid
    Mensajes
    1,261
    Mencionado
    4 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    19
    Thanked in
    Agradecido 11 veces en [ARG:2 UNDEFINED] posts
    Seguramente estará dicho header en la GPX2, lo saque en su momento de linux-arm... luego adapte un pelin, pero vamos poca cosa.

    TinyGL para GP32 literalmente se arrastra, intente usar math-sll, pero no hubo manera, necesita mucha mas precision para funcionar con texturas.
    Entiendo que la GPX2 llevara algo a medida para usar la segunda CPU ... sino, mal vamos.

  13. #13

    Fecha de ingreso
    Apr 2003
    Ubicación
    Salamanca
    Mensajes
    5,347
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    35
    Thanked in
    Agradecido 29 veces en [ARG:2 UNDEFINED] posts
    Pues yo creo que mas bien sera algo parecido al "mal vamos"

  14. #14

    Fecha de ingreso
    Jun 2003
    Ubicación
    Madrid
    Mensajes
    1,261
    Mencionado
    4 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    19
    Thanked in
    Agradecido 11 veces en [ARG:2 UNDEFINED] posts
    Tu bien que lo sabes... no hemos sufrido veces su mierda de GPSDK !!!

    Por cierto Morti.... ¿hiciste alguna mejora a la ML_Lib ?

    Lo digo, porque la sigo usando en el loader de Fenix para Dreamcast. Si tienes otra version mas estable, rapida o lo que sea... quizas sea el momento.

  15. #15

    Fecha de ingreso
    Apr 2003
    Ubicación
    Salamanca
    Mensajes
    5,347
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    13
    Agradecer Thanks Received 
    35
    Thanked in
    Agradecido 29 veces en [ARG:2 UNDEFINED] posts
    No la toco desde hace siglos (principios de año), está en la version 0.2 inestable (da fallos en algunos casos, el soporte de xpath no esta terminado y los DTDs los carga bien, incluso los externos, pero la validacion esta en pañales). No hay mejoras en la velocidad pero si en el consumo de memoria que lo consegui reducir un poco mas.

    Si todo va bien me gustaria terminar la version 0.2 y dejarla definitivamente para finales del mes que viene.

Página 1 de 3 123 ÚltimoÚltimo

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •