MATHC هي مكتبة رياضيات بسيطة للبرمجة ثنائية وثلاثية الأبعاد.
يمكنك المساعدة في تطوير اختبار MATHC للمكتبة وإرسال وظائف الرياضيات داخل النطاق والإبلاغ عن الأخطاء وتقديم التعليقات.
أعمل قليلاً في المكتبة هذه الأيام، لكني دائمًا منفتح على الاقتراحات والمساهمات.
بدءًا من الإصدار 2، يستخدم تطوير MATHC إصدار التقويم، مع علامة YYYY.MM.DD.MICRO
لكل إصدار ثابت. إذا خرق أحد الإصدارات التوافق مع الإصدارات السابقة، فسيتم ذكر ذلك في ملاحظات الإصدار.
يمكن تكوين MATHC باستخدام هذه المعالجات المسبقة:
MATHC_NO_INT
: تعطيل التطبيقات باستخدام mint_t
.MATHC_USE_INT8
: حدد mint_t
كـ int8_t
.MATHC_USE_INT16
: حدد mint_t
كـ int16_t
.MATHC_USE_INT32
: حدد mint_t
كـ int32_t
. هذا هو الافتراضي.MATHC_USE_INT64
: حدد mint_t
كـ int64_t
.MATHC_INT_TYPE
: قم بتعيين نوع مخصص لـ mint_t
.MATHC_NO_FLOATING_POINT
: تعطيل التطبيقات باستخدام mfloat_t
.MATHC_USE_SINGLE_FLOATING_POINT
: عرّف mfloat_t
على أنه float
. هذا هو الافتراضي.MATHC_USE_DOUBLE_FLOATING_POINT
: حدد mfloat_t
على أنه double
.MATHC_FLOATING_POINT_TYPE
: قم بتعيين نوع مخصص لـ mfloat_t
.MATHC_USE_UNIONS
: تحديد الاتحادات المجهولة داخل الهياكل.MATHC_NO_POINTER_STRUCT_FUNCTIONS
: لا تحدد الوظائف التي تأخذ المؤشر إلى الهياكل.MATHC_NO_STRUCT_FUNCTIONS
: لا تحدد الوظائف التي تأخذ الهياكل كقيمة.MATHC_NO_EASING_FUNCTIONS
: لا تحدد وظائف التخفيف. يمكنك تحديد هذه المعالجات المسبقة باستخدام خيار المترجم -D
أو باستخدام خيار المترجم -include
رأس التكوين مع معالجات التكوين المسبقة بداخله.
مثال لرأس التكوين الذي يجعل mint_t
int16_t
و mfloat_t
GLfloat
ويستخدم وظائف الرياضيات القياسية بدقة الفاصلة العائمة المزدوجة:
#include <gl.h>
#define MATHC_USE_INT16
#define MATHC_FLOATING_POINT_TYPE GLfloat
#define MATHC_USE_DOUBLE_FLOATING_POINT
افتراضيًا، يمكن تعريف المتجهات والكواتيرنيونات والمصفوفات كمصفوفات من mint_t
، أو مصفوفات من mfloat_t
، أو بنيات.
افتراضيًا، يحتوي MATHC على دوال تأخذ كمصفوفات وسيطة من mint_t
أو صفائف mfloat_t
أو بنيات كقيمة أو مؤشر إلى بنيات. الوظائف التي تأخذ البنية كقيمة لها البادئة s
. الوظائف التي تأخذ مؤشر البنية لها البادئة ps
.
وظائف التخفيف هي تنفيذ للوظائف المقدمة في easings.net، وهي مفيدة بشكل خاص للرسوم المتحركة.
تأخذ وظائف التخفيف قيمة داخل النطاق 0.0-1.0
وعادةً ما تُرجع قيمة داخل نفس النطاق.
إنشاء مصفوفة عرض "نظرة"، مفيدة للبرمجة ثلاثية الأبعاد:
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 ));
إنشاء مصفوفة إسقاط المنظور:
mfloat_t perspective [ MAT4_SIZE ];
mat4_perspective ( perspective , to_radians ( 60.0 ), 1.0 , 0.1 , 100.0 );
إنشاء مصفوفة نموذجية:
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 );
حقوق الطبع والنشر © 2018 فيليبي فيريرا دا سيلفا
يتم توفير هذا البرنامج "كما هو"، دون أي ضمان صريح أو ضمني. لن يتحمل المؤلفون بأي حال من الأحوال المسؤولية عن أي أضرار تنشأ عن استخدام هذا البرنامج.
يُسمح لأي شخص باستخدام هذا البرنامج لأي غرض، بما في ذلك التطبيقات التجارية، وتعديله وإعادة توزيعه بحرية، مع مراعاة القيود التالية: