بتـــــاريخ : 2/28/2011 7:53:37 PM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 2969 0


    [دروس] [درس] المصفوفات و برمجة الألعاب 3 دروس...

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : *خلدون خالد* | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :

    بســم الله الـرحمــن الرحيــم


    المصفوفات و برمجة الألعاب


    القسم الأول: المعنى الهندسي

    ما هي بالضبط هذه المصفوفات “Matrices” التي نقوم بإستخدامها في برامجنا في مكتبات برمجة الألعاب (Xna, OpenGL, DirectX…)؟ ربما لديك فكرة عن الموضوع، ولكنك تريد الإستزادة بهدف التمكن منه. ربما أنت غير معني بالرياضيات بالأصل، ولكنك تريد أن تعرف المفهوم الهندسي المرتبط بهم. في كل الحالات هذه الأقسام الثلاث لك :) .
    القسم الأول سوف يتحدث عن المعنى الهندسي لهذه المصفوفات “Geometric Meaning”، و التي يمكن تلخيصها بثلاث خصائص سهلة الفهم. القسم الثاني سوف يشرح المفاهيم الرياضية البسيطة خلفها “Math Meaning” وسوف ننتهي بالمصفوفات المتجانسة “Homogeneous Matrix” في القسم الثالث، وهي المصفوفات المستخدمة فعليا في مكتبات البرمجة.
    التحويلات “Transformations” :

    كلنا نعرف التحويلات، التي تقوم بتحويل أي إحداثي “Coordinate” لنقطة ثلاثية الأبعاد في الفضاء إلى نقطة ثلاثية أبعاد جديدة. فيما يلي سوف مثال على ثلاث أنواع من التحويلات البسيطة:
    ارفق صورة : monthly_04_2009/post-133895-1240577702.jpg

    التحويل الأول تقوم ببساطة بتحريك النقطة في الفضاء الثلاثي الأبعاد إلى الأسفل و إلى اليسار. هذا ‘التحريك‘ يسمى بالنقل “Translation”. التحويل الثاني الذي تراه هو التدوير “Rotation”، حيث يتم تدوير كل النقاط في الفضاء الثلاثي الأبعاد حول محور معين “Axis”، في هذه الحالة تم التدوير حول المحور Z. التحويل الثالث البسيط هو التحجيم “Scaling”، حيث يتم ضرب إحداثيات النقاط برقم معين.
    أنا اسمي ذلك بالتحويلات ‘البسيطة‘، لأن أي تحويل تفكر به بالإمكان وصفه من خلال دمج ثلاث تحويلات بسيطة. فيما يلي بإمكانك أن ترى نتيجة عملية نقل، متبوعه بعملية تدوير:
    ارفق صورة : monthly_04_2009/post-133895-1240577745.jpg

    عمليا هذا هو التحويل الذي قمنا (سنقوم) بإستخدامه في سلسلة الدروس الأولى، حيث قمنا أولا بنقل وسط التضاريس إلى نقطة الأصل، و بعدها قمنا بتدويرها عندما يضغط المستخدم على زر.

    خصائص المصفوفات الثلاثة

    الخاصية الأولى:
    يمكن التفكير بالمصفوفة كمجموعه من العناصر الخاصة (غير المعقدة)، و التي بالإمكان أن تصف أي من التحويلات السابقة. لذا تخيل أن لديك ثلاث مصفوفات: Mtrans , Mrot , Mscal؛ حيث كل واحدة منهم مرتبطة بإحدى التحويلات السابقة.
    الخاصية الثانية:
    إذا قمت بضرب إحدى هذه المصفوفات بإحداثي أي نقطة ثلاثية الأبعاد، سوف تحصل على إحداثي النقطة الجديدة (النقطة المحولة). كما هو موضح فيما يلي:
    ارفق صورة : monthly_04_2009/post-133895-1240577815.jpg

    هذا يعني أنه لأي نقطة، بإستطاعتك أن تحسب الإسقاط الخاص به “Projection” ببساطة عن طريق ضرب إحداثياتها بالمصفوفة! و هذا طبعا ينطبق على التدوير و التحجيم.
    الخاصية الثالثة:
    إذا قمت بضرب مصفوفتين M1 و M2، سوف تحصل على مصفوفة جديدة M3. التحويل المرتبط بهذه المصفوفة الجديدة M3، هو ناتج دمج التحويلات المرتبطة بالمصفوفتين الأوليتين M1 و M2.
    هذه الخاصية الثالثة مهمة جدا. تخيل المثال السابق الذي يحتوي على نقل متبوع بتدوير. أحد الطرق لحساب الإسقاط للنقاط، هي أن يتم حساب إسقاط النقاط، بإستخدام المصفوفة الخاصة بالنقل الأولى M1، وبعدها الحساب بإستخدام مصفوفة التدوير الثانية M2. هذا يعني أن بحاجة إلى حساب الإسقاط لكل نقطة مرتين. كما هو موضوح في الصورة التالية:
    ارفق صورة : monthly_04_2009/post-133895-1240577871.jpg
    بإستخدام الخاصية الثالثة، بإستطاعتك ببساطة أن تقوم بضرب المصفوفة الأولى M1 بالمصفوفة الثاينة M2 لتحصل على المصفوفة الثالثة M3. الآن كل ما تحتاجة ببساطة أن تقوم بضرب النقاط الخاصة بك بالمصفوفة الثالثة لكي تحصل على النقاط الجديده بعد تدويرها و نقلها! إن عملية ضرب مصفوفتين ببعض تتم بشكل سريع جدا (64 عملية ضرب و 48 عملية جمع) بينما تحويل النقاط بإستخدام مصفوفتين منفصليتين يأخذ وقت أطول بكثير (16 عملية ضرب و 12 عملية جمع لكل نقطة)
    ارفق صورة : monthly_04_2009/post-133895-1240577932.jpg
    هذه الخواص الثلاثة تلخص المفهوم الهندسي للمصفوفات في هذا القسم. في القسم التالي سوف نشاهد كيف تبدو المصفوفات بالضبط (المعنى الرياضي) إن شاء الله.

    مترجم من:
    http://www.riemers.net/eng/ExtraReading/ma...geometrical.php

    كلمات مفتاحية  :

    تعليقات الزوار ()