MATHC é uma biblioteca matemática simples para programação 2D e 3D.
Você pode ajudar no desenvolvimento do MATHC testando a biblioteca, enviando funções matemáticas dentro do escopo, reportando erros e dando feedback.
Atualmente trabalho pouco na biblioteca, mas estou sempre aberto a sugestões e contribuições.
A partir da versão 2, o desenvolvimento do MATHC utiliza versionamento de calendário, com uma tag YYYY.MM.DD.MICRO
para cada versão estável. Se uma versão quebrar a compatibilidade com versões anteriores, ela será mencionada nas notas de versão.
O MATHC pode ser configurado usando estes pré-processadores:
MATHC_NO_INT
: desabilita implementações usando mint_t
.MATHC_USE_INT8
: defina mint_t
como int8_t
.MATHC_USE_INT16
: defina mint_t
como int16_t
.MATHC_USE_INT32
: defina mint_t
como int32_t
. Este é o padrão.MATHC_USE_INT64
: defina mint_t
como int64_t
.MATHC_INT_TYPE
: defina um tipo personalizado para mint_t
.MATHC_NO_FLOATING_POINT
: desabilita implementações usando mfloat_t
.MATHC_USE_SINGLE_FLOATING_POINT
: defina mfloat_t
como float
. Este é o padrão.MATHC_USE_DOUBLE_FLOATING_POINT
: defina mfloat_t
como double
.MATHC_FLOATING_POINT_TYPE
: defina um tipo personalizado para mfloat_t
.MATHC_USE_UNIONS
: define uniões anônimas dentro de estruturas.MATHC_NO_POINTER_STRUCT_FUNCTIONS
: não defina as funções que levam ponteiro para estruturas.MATHC_NO_STRUCT_FUNCTIONS
: não defina as funções que tomam estruturas como valor.MATHC_NO_EASING_FUNCTIONS
: não defina as funções de atenuação. Você pode definir esses pré-processadores usando a opção -D
do compilador ou usando a opção -include
do compilador para incluir um cabeçalho de configuração com os pré-processadores de configuração dentro dele.
Exemplo de um cabeçalho de configuração que torna mint_t
um int16_t
, mfloat_t
um GLfloat
e usa as funções matemáticas padrão com precisão de ponto flutuante duplo:
#include
#define MATHC_USE_INT16
#define MATHC_FLOATING_POINT_TYPE GLfloat
#define MATHC_USE_DOUBLE_FLOATING_POINT
Por padrão, vetores, quaternions e matrizes podem ser declarados como arrays de mint_t
, arrays de mfloat_t
ou estruturas.
Por padrão, MATHC possui funções que tomam como argumento matrizes de mint_t
, matrizes de mfloat_t
, estruturas como valor ou ponteiro para estruturas. Funções que tomam estrutura como valor possuem um prefixo s
. Funções que usam ponteiro de estrutura têm um prefixo ps
.
As funções de easing são uma implementação das funções apresentadas em easings.net, úteis principalmente para animações.
As funções de atenuação assumem um valor dentro do intervalo 0.0-1.0
e geralmente retornam um valor dentro desse mesmo intervalo.
Criando uma matriz de visualização "olhar para", útil para programação 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 ));
Criando uma matriz de projeção em perspectiva:
mfloat_t perspective [ MAT4_SIZE ];
mat4_perspective ( perspective , to_radians ( 60.0 ), 1.0 , 0.1 , 100.0 );
Criando uma matriz de 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 é fornecido “no estado em que se encontra”, sem qualquer garantia expressa ou implícita. Em nenhum caso os autores serão responsabilizados por quaisquer danos decorrentes do uso deste software.
É concedida permissão a qualquer pessoa para usar este software para qualquer finalidade, incluindo aplicações comerciais, e para alterá-lo e redistribuí-lo livremente, sujeito às seguintes restrições: