MATHC ist eine einfache Mathematikbibliothek für die 2D- und 3D-Programmierung.
Sie können bei der Entwicklung von MATHC helfen, indem Sie die Bibliothek testen, im Umfang enthaltene mathematische Funktionen senden, Fehler melden und Feedback geben.
Heutzutage beschäftige ich mich kaum noch mit der Bibliothek, bin aber immer offen für Vorschläge und Beiträge.
Ab Version 2 verwendet die Entwicklung von MATHC eine Kalenderversionierung mit einem Tag YYYY.MM.DD.MICRO
für jede stabile Version. Wenn eine Version die Abwärtskompatibilität beeinträchtigt, wird dies in den Versionshinweisen erwähnt.
MATHC kann mit diesen Präprozessoren konfiguriert werden:
MATHC_NO_INT
: Implementierungen mit mint_t
deaktivieren.MATHC_USE_INT8
: Definieren Sie mint_t
als int8_t
.MATHC_USE_INT16
: Definieren Sie mint_t
als int16_t
.MATHC_USE_INT32
: Definieren Sie mint_t
als int32_t
. Dies ist die Standardeinstellung.MATHC_USE_INT64
: Definieren Sie mint_t
als int64_t
.MATHC_INT_TYPE
: Legen Sie einen benutzerdefinierten Typ für mint_t
fest.MATHC_NO_FLOATING_POINT
: Implementierungen mit mfloat_t
deaktivieren.MATHC_USE_SINGLE_FLOATING_POINT
: mfloat_t
als float
definieren. Dies ist die Standardeinstellung.MATHC_USE_DOUBLE_FLOATING_POINT
: mfloat_t
als double
definieren.MATHC_FLOATING_POINT_TYPE
: Legen Sie einen benutzerdefinierten Typ für mfloat_t
fest.MATHC_USE_UNIONS
: Definieren Sie anonyme Unions innerhalb von Strukturen.MATHC_NO_POINTER_STRUCT_FUNCTIONS
: Definieren Sie nicht die Funktionen, die Zeiger auf Strukturen annehmen.MATHC_NO_STRUCT_FUNCTIONS
: Definieren Sie nicht die Funktionen, die Strukturen als Wert annehmen.MATHC_NO_EASING_FUNCTIONS
: Definieren Sie die Beschleunigungsfunktionen nicht. Sie können diese Präprozessoren mit der Compileroption -D
oder mit der Compileroption -include
definieren, um einen Konfigurationsheader mit den darin enthaltenen Konfigurationspräprozessoren einzuschließen.
Beispiel für einen Konfigurationsheader, der mint_t
zu int16_t
und mfloat_t
zu GLfloat
macht und die Standard-Mathefunktionen mit doppelter Gleitkommagenauigkeit verwendet:
#include
#define MATHC_USE_INT16
#define MATHC_FLOATING_POINT_TYPE GLfloat
#define MATHC_USE_DOUBLE_FLOATING_POINT
Standardmäßig können Vektoren, Quaternionen und Matrizen als Arrays von mint_t
, Arrays von mfloat_t
oder Strukturen deklariert werden.
Standardmäßig verfügt MATHC über Funktionen, die als Argument Arrays von mint_t
, Arrays von mfloat_t
, Strukturen als Wert oder Zeiger auf Strukturen verwenden. Funktionen, die Struktur als Wert annehmen, haben ein Präfix s
. Funktionen, die Strukturzeiger annehmen, haben ein Präfix ps
.
Die Easing-Funktionen sind eine Implementierung der in easings.net vorgestellten Funktionen und eignen sich insbesondere für Animationen.
Beschleunigungsfunktionen nehmen einen Wert im Bereich von 0.0-1.0
an und geben normalerweise einen Wert innerhalb desselben Bereichs zurück.
Erstellen einer „Ansicht“-Ansichtsmatrix, nützlich für die 3D-Programmierung:
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 ));
Erstellen einer perspektivischen Projektionsmatrix:
mfloat_t perspective [ MAT4_SIZE ];
mat4_perspective ( perspective , to_radians ( 60.0 ), 1.0 , 0.1 , 100.0 );
Erstellen einer Modellmatrix:
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
Diese Software wird „wie besehen“ ohne jegliche ausdrückliche oder stillschweigende Garantie bereitgestellt. In keinem Fall haften die Autoren für Schäden, die aus der Nutzung dieser Software entstehen.
Es wird jedem gestattet, diese Software für beliebige Zwecke, einschließlich kommerzieller Anwendungen, zu nutzen und sie zu verändern und frei weiterzuverbreiten, vorbehaltlich der folgenden Einschränkungen: