MATHC es una biblioteca matemática sencilla para programación 2D y 3D.
Puede ayudar con el desarrollo de MATHC probando la biblioteca, enviando funciones matemáticas dentro del alcance, informando errores y brindando comentarios.
Trabajo poco en la biblioteca hoy en día, pero siempre estoy abierto a sugerencias y aportaciones.
A partir de la versión 2, el desarrollo de MATHC utiliza versiones de calendario, con una etiqueta YYYY.MM.DD.MICRO
para cada versión estable. Si una versión rompe la compatibilidad con versiones anteriores, se menciona en las notas de la versión.
MATHC se puede configurar utilizando estos preprocesadores:
MATHC_NO_INT
: deshabilita las implementaciones usando mint_t
.MATHC_USE_INT8
: define mint_t
como int8_t
.MATHC_USE_INT16
: define mint_t
como int16_t
.MATHC_USE_INT32
: define mint_t
como int32_t
. Este es el valor predeterminado.MATHC_USE_INT64
: define mint_t
como int64_t
.MATHC_INT_TYPE
: establece un tipo personalizado para mint_t
.MATHC_NO_FLOATING_POINT
: deshabilita las implementaciones usando mfloat_t
.MATHC_USE_SINGLE_FLOATING_POINT
: define mfloat_t
como float
. Este es el valor predeterminado.MATHC_USE_DOUBLE_FLOATING_POINT
: define mfloat_t
como double
.MATHC_FLOATING_POINT_TYPE
: establece un tipo personalizado para mfloat_t
.MATHC_USE_UNIONS
: define uniones anónimas dentro de estructuras.MATHC_NO_POINTER_STRUCT_FUNCTIONS
: no define las funciones que apuntan a estructuras.MATHC_NO_STRUCT_FUNCTIONS
: no define las funciones que toman estructuras como valor.MATHC_NO_EASING_FUNCTIONS
: no define las funciones de aceleración. Puede definir estos preprocesadores usando la opción del compilador -D
o usando la opción del compilador -include
para incluir un encabezado de configuración con los preprocesadores de configuración dentro.
Ejemplo de un encabezado de configuración que convierte mint_t
en int16_t
, mfloat_t
en GLfloat
y utiliza las funciones matemáticas estándar con doble precisión de punto flotante:
#include
#define MATHC_USE_INT16
#define MATHC_FLOATING_POINT_TYPE GLfloat
#define MATHC_USE_DOUBLE_FLOATING_POINT
De forma predeterminada, los vectores, cuaterniones y matrices se pueden declarar como matrices de mint_t
, matrices de mfloat_t
o estructuras.
De forma predeterminada, MATHC tiene funciones que toman como argumento matrices de mint_t
, matrices de mfloat_t
, estructuras como valor o puntero a estructuras. Las funciones que toman estructura como valor tienen un prefijo s
. Las funciones que toman un puntero de estructura tienen un prefijo ps
.
Las funciones de aceleración son una implementación de las funciones presentadas en easings.net, útiles particularmente para animaciones.
Las funciones de aceleración toman un valor dentro del rango 0.0-1.0
y normalmente devolverán un valor dentro de ese mismo rango.
Crear una matriz de vista de "mirar", útil para la programación 3D:
mfloat_t position [ VEC3_SIZE ];
mfloat_t target [ VEC3_SIZE ];
mfloat_t up [ VEC3_SIZE ];
mfloat_t view [ MAT4_SIZE ];
mat4_look_at ( view ,
vec3 ( position , 0.0 , 0.0 , 10.0 ),
vec3 ( target , 0.0 , 0.0 , 0.0 ),
vec3 ( up , 0.0 , 1.0 , 0.0 ));
Creando una matriz de proyección en perspectiva:
mfloat_t perspective [ MAT4_SIZE ];
mat4_perspective ( perspective , to_radians ( 60.0 ), 1.0 , 0.1 , 100.0 );
Creando una matriz modelo:
mfloat_t position [ VEC3_SIZE ];
mfloat_t scaling [ VEC3_SIZE ];
struct {
mfloat_t position [ MAT4_SIZE ];
mfloat_t rotation [ MAT4_SIZE ];
mfloat_t scaling [ MAT4_SIZE ];
mfloat_t model [ MAT4_SIZE ];
} matrices ;
/* Position */
mat4_identity ( matrices . position );
mat4_translation ( matrices . position ,
vec3 ( position , 0.0 , 0.0 , 0.0 ));
/* Rotation */
mat4_identity ( matrices . rotation );
mat4_rotation_x ( matrices . rotation , to_radians ( 30.0 ));
/* Scaling */
mat4_identity ( matrices . scaling );
mat4_translation ( matrices . scaling ,
vec3 ( scaling , 1.0 , 1.0 , 1.0 ));
/* Model matrix */
mat4_multiply ( matrices . model , matrices . scaling , matrices . rotation );
mat4_multiply ( matrices . model , matrices . position , matrices . model );
Copyright © 2018 Felipe Ferreira da Silva
Este software se proporciona "tal cual", sin ninguna garantía expresa o implícita. En ningún caso los autores serán responsables de los daños que surjan del uso de este software.
Se concede permiso a cualquier persona para utilizar este software para cualquier fin, incluidas aplicaciones comerciales, y para modificarlo y redistribuirlo libremente, sujeto a las siguientes restricciones: