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 <gl.h>
#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: