MATHC adalah perpustakaan matematika sederhana untuk pemrograman 2D dan 3D.
Anda dapat membantu pengembangan perpustakaan pengujian MATHC, mengirimkan fungsi matematika dalam cakupan, melaporkan kesalahan, dan memberikan umpan balik.
Saat ini saya jarang bekerja di perpustakaan, namun saya selalu terbuka terhadap saran dan kontribusi.
Mulai versi 2, pengembangan MATHC menggunakan versi kalender, dengan tag YYYY.MM.DD.MICRO
untuk setiap rilis stabil. Jika suatu rilis melanggar kompatibilitas ke belakang, maka hal itu disebutkan dalam catatan rilis.
MATHC dapat dikonfigurasi menggunakan praprosesor berikut:
MATHC_NO_INT
: nonaktifkan implementasi menggunakan mint_t
.MATHC_USE_INT8
: definisikan mint_t
sebagai int8_t
.MATHC_USE_INT16
: definisikan mint_t
sebagai int16_t
.MATHC_USE_INT32
: definisikan mint_t
sebagai int32_t
. Ini adalah standarnya.MATHC_USE_INT64
: definisikan mint_t
sebagai int64_t
.MATHC_INT_TYPE
: atur tipe khusus untuk mint_t
.MATHC_NO_FLOATING_POINT
: nonaktifkan implementasi menggunakan mfloat_t
.MATHC_USE_SINGLE_FLOATING_POINT
: definisikan mfloat_t
sebagai float
. Ini adalah standarnya.MATHC_USE_DOUBLE_FLOATING_POINT
: definisikan mfloat_t
sebagai double
.MATHC_FLOATING_POINT_TYPE
: menetapkan tipe khusus untuk mfloat_t
.MATHC_USE_UNIONS
: mendefinisikan gabungan anonim di dalam struktur.MATHC_NO_POINTER_STRUCT_FUNCTIONS
: jangan mendefinisikan fungsi yang membawa penunjuk ke struktur.MATHC_NO_STRUCT_FUNCTIONS
: jangan mendefinisikan fungsi yang mengambil struktur sebagai nilai.MATHC_NO_EASING_FUNCTIONS
: tidak mendefinisikan fungsi easing. Anda dapat mendefinisikan praprosesor ini menggunakan opsi kompiler -D
atau menggunakan opsi kompiler -include
untuk menyertakan header konfigurasi dengan praprosesor konfigurasi di dalamnya.
Contoh header konfigurasi yang menjadikan mint_t
menjadi int16_t
, mfloat_t
menjadi GLfloat
dan menggunakan fungsi matematika standar dengan presisi floating-point ganda:
#include
#define MATHC_USE_INT16
#define MATHC_FLOATING_POINT_TYPE GLfloat
#define MATHC_USE_DOUBLE_FLOATING_POINT
Secara default, vektor, angka empat, dan matriks dapat dideklarasikan sebagai larik mint_t
, larik mfloat_t
, atau struktur.
Secara default, MATHC memiliki fungsi yang menggunakan array argumen mint_t
, array mfloat_t
, struktur sebagai nilai, atau penunjuk ke struktur. Fungsi yang menggunakan struktur sebagai nilai memiliki awalan s
. Fungsi yang menggunakan penunjuk struktur memiliki awalan ps
.
Fungsi easing merupakan implementasi dari fungsi yang disajikan di easings.net, berguna khususnya untuk animasi.
Fungsi pelonggaran mengambil nilai dalam rentang 0.0-1.0
dan biasanya akan mengembalikan nilai dalam rentang yang sama.
Membuat matriks tampilan "lihat", berguna untuk pemrograman 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 ));
Membuat matriks proyeksi perspektif:
mfloat_t perspective [ MAT4_SIZE ];
mat4_perspective ( perspective , to_radians ( 60.0 ), 1.0 , 0.1 , 100.0 );
Membuat matriks model:
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 );
Hak Cipta © 2018 Felipe Ferreira da Silva
Perangkat lunak ini disediakan 'apa adanya', tanpa jaminan tersurat maupun tersirat. Dalam keadaan apa pun penulis tidak bertanggung jawab atas segala kerusakan yang timbul dari penggunaan perangkat lunak ini.
Izin diberikan kepada siapa pun untuk menggunakan perangkat lunak ini untuk tujuan apa pun, termasuk aplikasi komersial, dan untuk mengubahnya serta mendistribusikannya kembali secara bebas, dengan tunduk pada batasan berikut: