MATHC est une bibliothèque mathématique simple pour la programmation 2D et 3D.
Vous pouvez aider au développement de MATHC en testant la bibliothèque, en envoyant des fonctions mathématiques pertinentes, en signalant les erreurs et en donnant des commentaires.
Je travaille peu à la bibliothèque aujourd'hui, mais je suis toujours ouvert aux suggestions et contributions.
À partir de la version 2, le développement de MATHC utilise le versioning du calendrier, avec une balise YYYY.MM.DD.MICRO
pour chaque version stable. Si une version rompt la compatibilité ascendante, cela est mentionné dans les notes de version.
MATHC peut être configuré à l'aide de ces préprocesseurs :
MATHC_NO_INT
: désactivez les implémentations en utilisant mint_t
.MATHC_USE_INT8
: définissez mint_t
comme int8_t
.MATHC_USE_INT16
: définissez mint_t
comme int16_t
.MATHC_USE_INT32
: définissez mint_t
comme int32_t
. C'est la valeur par défaut.MATHC_USE_INT64
: définissez mint_t
comme int64_t
.MATHC_INT_TYPE
: définissez un type personnalisé pour mint_t
.MATHC_NO_FLOATING_POINT
: désactivez les implémentations en utilisant mfloat_t
.MATHC_USE_SINGLE_FLOATING_POINT
: définissez mfloat_t
comme float
. C'est la valeur par défaut.MATHC_USE_DOUBLE_FLOATING_POINT
: définissez mfloat_t
comme double
.MATHC_FLOATING_POINT_TYPE
: définissez un type personnalisé pour mfloat_t
.MATHC_USE_UNIONS
: définit des unions anonymes à l'intérieur des structures.MATHC_NO_POINTER_STRUCT_FUNCTIONS
: ne définit pas les fonctions qui prennent des pointeurs vers les structures.MATHC_NO_STRUCT_FUNCTIONS
: ne définit pas les fonctions qui prennent les structures comme valeur.MATHC_NO_EASING_FUNCTIONS
: ne définit pas les fonctions d'assouplissement. Vous pouvez définir ces préprocesseurs à l'aide de l'option -D
du compilateur ou à l'aide de l'option -include
du compilateur pour inclure un en-tête de configuration contenant les préprocesseurs de configuration.
Exemple d'en-tête de configuration qui fait mint_t
un int16_t
, mfloat_t
un GLfloat
et utilise les fonctions mathématiques standard avec une double précision en virgule flottante :
#include
#define MATHC_USE_INT16
#define MATHC_FLOATING_POINT_TYPE GLfloat
#define MATHC_USE_DOUBLE_FLOATING_POINT
Par défaut, les vecteurs, quaternions et matrices peuvent être déclarés sous forme de tableaux de mint_t
, de tableaux de mfloat_t
ou de structures.
Par défaut, MATHC a des fonctions qui prennent comme argument des tableaux de mint_t
, des tableaux de mfloat_t
, des structures comme valeur ou un pointeur vers des structures. Les fonctions qui prennent la structure comme valeur ont un préfixe s
. Les fonctions qui prennent un pointeur de structure ont un préfixe ps
.
Les fonctions d'easing sont une implémentation des fonctions présentées dans easings.net, utiles notamment pour les animations.
Les fonctions d'assouplissement prennent une valeur comprise entre 0.0-1.0
et renvoient généralement une valeur comprise dans cette même plage.
Création d'une matrice de vue "regarder", utile pour la programmation 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 ));
Création d'une matrice de projection en perspective :
mfloat_t perspective [ MAT4_SIZE ];
mat4_perspective ( perspective , to_radians ( 60.0 ), 1.0 , 0.1 , 100.0 );
Création d'une matrice de modèle :
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 );
Droits d'auteur © 2018 Felipe Ferreira da Silva
Ce logiciel est fourni « tel quel », sans aucune garantie expresse ou implicite. En aucun cas les auteurs ne pourront être tenus responsables de tout dommage résultant de l'utilisation de ce logiciel.
L'autorisation est accordée à toute personne d'utiliser ce logiciel à quelque fin que ce soit, y compris pour des applications commerciales, ainsi que de le modifier et de le redistribuer librement, sous réserve des restrictions suivantes :