بســم الله الـرحمــن الرحيــم المصفوفات و برمجة الألعاب القسم الأول: المعنى الهندسي ما هي بالضبط هذه المصفوفات “Matrices” التي نقوم بإستخدامها في برامجنا في مكتبات برمجة الألعاب (Xna, OpenGL, DirectX…)؟ ربما لديك فكرة عن الموضوع، ولكنك تريد الإستزادة بهدف التمكن منه. ربما أنت غير معني بالرياضيات بالأصل، ولكنك تريد أن تعرف المفهوم الهندسي المرتبط بهم. في كل الحالات هذه الأقسام الثلاث لك . القسم الأول سوف يتحدث عن المعنى الهندسي لهذه المصفوفات “Geometric Meaning”، و التي يمكن تلخيصها بثلاث خصائص سهلة الفهم. القسم الثاني سوف يشرح المفاهيم الرياضية البسيطة خلفها “Math Meaning” وسوف ننتهي بالمصفوفات المتجانسة “Homogeneous Matrix” في القسم الثالث، وهي المصفوفات المستخدمة فعليا في مكتبات البرمجة. التحويلات “Transformations” : كلنا نعرف التحويلات، التي تقوم بتحويل أي إحداثي “Coordinate” لنقطة ثلاثية الأبعاد في الفضاء إلى نقطة ثلاثية أبعاد جديدة. فيما يلي سوف مثال على ثلاث أنواع من التحويلات البسيطة: التحويل الأول تقوم ببساطة بتحريك النقطة في الفضاء الثلاثي الأبعاد إلى الأسفل و إلى اليسار. هذا ‘التحريك‘ يسمى بالنقل “Translation”. التحويل الثاني الذي تراه هو التدوير “Rotation”، حيث يتم تدوير كل النقاط في الفضاء الثلاثي الأبعاد حول محور معين “Axis”، في هذه الحالة تم التدوير حول المحور Z. التحويل الثالث البسيط هو التحجيم “Scaling”، حيث يتم ضرب إحداثيات النقاط برقم معين. أنا اسمي ذلك بالتحويلات ‘البسيطة‘، لأن أي تحويل تفكر به بالإمكان وصفه من خلال دمج ثلاث تحويلات بسيطة. فيما يلي بإمكانك أن ترى نتيجة عملية نقل، متبوعه بعملية تدوير: عمليا هذا هو التحويل الذي قمنا (سنقوم) بإستخدامه في سلسلة الدروس الأولى، حيث قمنا أولا بنقل وسط التضاريس إلى نقطة الأصل، و بعدها قمنا بتدويرها عندما يضغط المستخدم على زر. خصائص المصفوفات الثلاثة الخاصية الأولى: يمكن التفكير بالمصفوفة كمجموعه من العناصر الخاصة (غير المعقدة)، و التي بالإمكان أن تصف أي من التحويلات السابقة. لذا تخيل أن لديك ثلاث مصفوفات: Mtrans , Mrot , Mscal؛ حيث كل واحدة منهم مرتبطة بإحدى التحويلات السابقة. الخاصية الثانية: إذا قمت بضرب إحدى هذه المصفوفات بإحداثي أي نقطة ثلاثية الأبعاد، سوف تحصل على إحداثي النقطة الجديدة (النقطة المحولة). كما هو موضح فيما يلي: هذا يعني أنه لأي نقطة، بإستطاعتك أن تحسب الإسقاط الخاص به “Projection” ببساطة عن طريق ضرب إحداثياتها بالمصفوفة! و هذا طبعا ينطبق على التدوير و التحجيم. الخاصية الثالثة: إذا قمت بضرب مصفوفتين M1 و M2، سوف تحصل على مصفوفة جديدة M3. التحويل المرتبط بهذه المصفوفة الجديدة M3، هو ناتج دمج التحويلات المرتبطة بالمصفوفتين الأوليتين M1 و M2. هذه الخاصية الثالثة مهمة جدا. تخيل المثال السابق الذي يحتوي على نقل متبوع بتدوير. أحد الطرق لحساب الإسقاط للنقاط، هي أن يتم حساب إسقاط النقاط، بإستخدام المصفوفة الخاصة بالنقل الأولى M1، وبعدها الحساب بإستخدام مصفوفة التدوير الثانية M2. هذا يعني أن بحاجة إلى حساب الإسقاط لكل نقطة مرتين. كما هو موضوح في الصورة التالية: بإستخدام الخاصية الثالثة، بإستطاعتك ببساطة أن تقوم بضرب المصفوفة الأولى M1 بالمصفوفة الثاينة M2 لتحصل على المصفوفة الثالثة M3. الآن كل ما تحتاجة ببساطة أن تقوم بضرب النقاط الخاصة بك بالمصفوفة الثالثة لكي تحصل على النقاط الجديده بعد تدويرها و نقلها! إن عملية ضرب مصفوفتين ببعض تتم بشكل سريع جدا (64 عملية ضرب و 48 عملية جمع) بينما تحويل النقاط بإستخدام مصفوفتين منفصليتين يأخذ وقت أطول بكثير (16 عملية ضرب و 12 عملية جمع لكل نقطة) هذه الخواص الثلاثة تلخص المفهوم الهندسي للمصفوفات في هذا القسم. في القسم التالي سوف نشاهد كيف تبدو المصفوفات بالضبط (المعنى الرياضي) إن شاء الله. مترجم من: http://www.riemers.net/eng/ExtraReading/ma...geometrical.php