الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه *خلدون خالد* في 24 أبريل 2009 · 19 رد · 11,457 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

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

القسم الأول سوف يتحدث عن المعنى الهندسي لهذه المصفوفات “Geometric Meaning”، و التي يمكن تلخيصها بثلاث خصائص سهلة الفهم. القسم الثاني سوف يشرح المفاهيم الرياضية البسيطة خلفها “Math Meaning” وسوف ننتهي بالمصفوفات المتجانسة “Homogeneous Matrix” في القسم الثالث، وهي المصفوفات المستخدمة فعليا في مكتبات البرمجة.

التحويلات “Transformations” :

كلنا نعرف التحويلات، التي تقوم بتحويل أي إحداثي “Coordinate” لنقطة ثلاثية الأبعاد في الفضاء إلى نقطة ثلاثية أبعاد جديدة. فيما يلي سوف مثال على ثلاث أنواع من التحويلات البسيطة:

post-133895-1240577702_thumb.jpg

التحويل الأول تقوم ببساطة بتحريك النقطة في الفضاء الثلاثي الأبعاد إلى الأسفل و إلى اليسار. هذا ‘التحريك‘ يسمى بالنقل “Translation”. التحويل الثاني الذي تراه هو التدوير “Rotation”، حيث يتم تدوير كل النقاط في الفضاء الثلاثي الأبعاد حول محور معين “Axis”، في هذه الحالة تم التدوير حول المحور Z. التحويل الثالث البسيط هو التحجيم “Scaling”، حيث يتم ضرب إحداثيات النقاط برقم معين.

أنا اسمي ذلك بالتحويلات ‘البسيطة‘، لأن أي تحويل تفكر به بالإمكان وصفه من خلال دمج ثلاث تحويلات بسيطة. فيما يلي بإمكانك أن ترى نتيجة عملية نقل، متبوعه بعملية تدوير:

post-133895-1240577745_thumb.jpg

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

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

الخاصية الأولى:

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

الخاصية الثانية:

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

post-133895-1240577815_thumb.jpg

هذا يعني أنه لأي نقطة، بإستطاعتك أن تحسب الإسقاط الخاص به “Projection” ببساطة عن طريق ضرب إحداثياتها بالمصفوفة! و هذا طبعا ينطبق على التدوير و التحجيم.

الخاصية الثالثة:

إذا قمت بضرب مصفوفتين M1 و M2، سوف تحصل على مصفوفة جديدة M3. التحويل المرتبط بهذه المصفوفة الجديدة M3، هو ناتج دمج التحويلات المرتبطة بالمصفوفتين الأوليتين M1 و M2.

هذه الخاصية الثالثة مهمة جدا. تخيل المثال السابق الذي يحتوي على نقل متبوع بتدوير. أحد الطرق لحساب الإسقاط للنقاط، هي أن يتم حساب إسقاط النقاط، بإستخدام المصفوفة الخاصة بالنقل الأولى M1، وبعدها الحساب بإستخدام مصفوفة التدوير الثانية M2. هذا يعني أن بحاجة إلى حساب الإسقاط لكل نقطة مرتين. كما هو موضوح في الصورة التالية:

post-133895-1240577871_thumb.jpg

بإستخدام الخاصية الثالثة، بإستطاعتك ببساطة أن تقوم بضرب المصفوفة الأولى M1 بالمصفوفة الثاينة M2 لتحصل على المصفوفة الثالثة M3. الآن كل ما تحتاجة ببساطة أن تقوم بضرب النقاط الخاصة بك بالمصفوفة الثالثة لكي تحصل على النقاط الجديده بعد تدويرها و نقلها! إن عملية ضرب مصفوفتين ببعض تتم بشكل سريع جدا (64 عملية ضرب و 48 عملية جمع) بينما تحويل النقاط بإستخدام مصفوفتين منفصليتين يأخذ وقت أطول بكثير (16 عملية ضرب و 12 عملية جمع لكل نقطة)

post-133895-1240577932_thumb.jpg

هذه الخواص الثلاثة تلخص المفهوم الهندسي للمصفوفات في هذا القسم. في القسم التالي سوف نشاهد كيف تبدو المصفوفات بالضبط (المعنى الرياضي) إن شاء الله.

مترجم من:

http://www.riemers.net/eng/ExtraReading/ma...geometrical.php

خلدون خالد

تم تعديل هذه المشاركة بواسطة خلدون خالد2 في 24 أبريل 2009 في 20:59

#2

رائع كمل ، لو نظرت الي المرشد الكامل فصل الهندسة التحليلة ، هتجد المزيد :)

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#4

موضوع رائع وجميل

وبارك الله فيك

#5

بارك الله فيك أخي , موضوع مهم .

أدرس هذا الموضوع في هذه الفترة .. ولا زلت أشعر أني لم أجد الحلقة المفقودة في عالم المصفوفات .

هناك سؤال محيّر .. قد أكون متسرعا في طرحه :

Homogeneous Matrix ؟

مافائدتها ..

سألت " دكتور " .. وقال لي : أنها فقط تجعل من ضرب المصفوفات ممكن ( عدد أعمدة المصفوفة الاولى == عدد صفوف المصفوفة الثانية )

ولكن الموضوع يبدو أنه أكبر من هذا .. أجد في بعض الكتب المتخصصة .. يتكلمون عن w ( الاحداثي الرابع ) .. من منظور هندسي .. وأنه يشكل خط مستقيم لا متناهي ... ومن هذا الكلام ..؟

و w ( الاحداثي الرابع ) .. نجده في مرحلة normalized device أيضا ؟

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

جميل جدا . مشكور

ياريت تتحفنا بدرس عن المتجهات و تطبيقاتها الفعلية . مو بس نظريات

#7

أعتذر من جميع الأخوة عن التأخر في إلإكمال..

القسم الثاني بعد دقائق بإذن الله

#8

القسم الثاني: المعنى الرياضي

من الواضح أنه بكونك تقرأ هذا القسم ذلك يعني أنك قد فهمت فكرة لماذا نقوم بإستخدام المصفوفات في برمجة الألعاب، ولكنك تريد أن تتعرف على المزيد من التفاصيل. إذن دعنا نبدأ بعرض ماهية المصفوفات عمليا.

المصفوفة “Matrix” هي مجرد جدول من الارقام ليس إلا. بشكل بسيط مثل ورقة الإكسل “Excel sheet”؛ أو مصفوفة “Array” من الأرقام، إذا كنت تفضل هذا المفهوم. من أجل معالجة إحداثيات ثلاثية أبعاد، يلزمنا مصفوفة مكونة من ثلاثة صفوف وثلاثة أعمدة، كما ترى هنا:

post-133895-1246373028_thumb.jpg

إذا أردت فإنه بالإمكان تمثيل نقطة ثلاثية الأبعاد في مصفوفة مكونة من عمود واحد و 3 صفوف. عند تطبيق الضرب لهذه النقطة مع مصفوفة سوف تكون العملية كالتالي طبعا (XOrginal = الأصلية ، Transformed = المحولة):

post-133895-1246373037_thumb.jpg

الآن واضح أن كل شيئ جاهز! لا شيئ صعب، وربما حان الوقت لمثال صغير، فيصبح بإمكانك أن تعرف كيف يعمل ذلك. تخيل أن لدينا نقطة في الفضاء الثلاثي الأبعاد لها الإحداثيات (6,18,9.5). دعنا نبدأ بمثال بسيط: سوف نقوم بتكبير المشهد، بحيث تظهر جميع الكائنات بحجم مضاعف. هذا يعني أننا بحاجة إلى التحجيم بالمعامل 2. بشكل عام فإن مصفوفة التحجيم ببساطة تبدو بالشكل التالي:

post-133895-1246373043_thumb.jpg

حيث S هي قيمة التحجيم، إذن تصبح العملية بالشكل التالي (XScaled هي قيمة X بعد التحجيم):

post-133895-1246373050_thumb.jpg

في حالة مثالنا الصغير، سنعطي S القيمة 2، بالتالي فإن إحداثيات النقطة المحولة هو (12,36,19).

الآن بعد أن شاهدنا مصفوفة التحويل، دعنا ننتقل ونلقي نظرة على مصفوفات التدوير. تبدو هذه المصفوفات أصعب قليلا، ولكن تذكر أن دائما أن كل ال Sin و ال Cos هي في الحقيقة أرقام بين ال -1 و ال 1 . هذه المصفوفات الثلاثة تمثل التدوير حول المحاور X،Y و Z بشكل متتالي من اليسار إلى اليمين بالزاوية ثيتا “Ѳ” :

post-133895-1246373058_thumb.jpg

مثال صغير سوف يساعد. إفترض أننا نريد تدوير النقطة (10,5,0) حول المحورZ بزاوية 45 درجة. يعبر عن ذلك بالمصفوفات بـ:

post-133895-1246373066_thumb.jpg

بما أن القيمة النسبية PI = 3.14 مقابلة للقيمة 180 درجة، إذن القيمة 45 مقابلة للقيمة Pi/4.

هذا يعطينا:

post-133895-1246373072_thumb.jpg

إذا عندما تقوم بتدوير النقطة (10,5,0) ب 45 درجة، سوف تحصل على النقطة (10.6065,-3.5355,0)! لحسن الحظ أن مكتبات برمجة الألعاب مثل DirectX, Xna ,OpenGl تهتم بالرياضيات من أجلنا، ولكن الآن لديك فكره كيف يعمل كل ذلك.

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

تم تعديل هذه المشاركة بواسطة خلدون خالد2 في 30 يونيو 2009 في 18:00

#9

ما شاء الله جهد رائع وبارك الله فيك

#10

القسم الثالث: المصفوفات المتجانسة “Homogenous Matrix”

إذا كنت قد تعاملت مع المصفوفات من خلال ال DirectX أو ال Xna. سوف ترى أنها تتكون من 16 مكونا، ما يعني أنها تتكون من 4 صفوف و 4 أعمدة. تم اختيار هذا التنسيق، بهدف السماح لهذه المصفوفات تمثيل عملية النقل “Translation”.

من أجل نقل نقطة، نحتاج لإضافة رقم لكل من مكونات هذه النقطة. بإستخدام مصفوفة بحجم 3*3، نستطيع أن فقط أن نحصل على مضروب بالنقاط الأصلية. لذا سوف نقوم بعد X,Y و Z، بإضافة رقم ثابت لتمثيل الإحداثي للنقطة. من أجل التبسيط، دعنا نستخدم الرقم 1. إذن من الآن، سوف نقوم بتمثيل النقاط الثلاثية الأبعاد بإستخدام 4 إحداثيات. مثلا النقطة (10,5,0) سوف يتم تمثيلها بالإحداثي (10,5,0,1). هذه الإحداثيات تسمى الإحداثيات المتجانسة للنقطة.

مصفوفات التدوير و التحجيم تبقى كما هي، ولكنها سوف تحتوي على عمود إضافي و صف إضافي مكون من أصفار، بإستثناء القيمة في الموقع m44، التي تأخذ القيمة 1. فيما يلي بإمكانك أن تلاحظ ما سوف تبدو عليه المصفوفات المتجانسة لكل من التحجيم و التدوير على محور Y:

post-133895-1246444060_thumb.jpg

يبدو ذلك معقد بعض الشيئ، و لكن الآن بإستطاعتنا على الأقل أن نعرف مصفوفة نقل:

post-133895-1246444067_thumb.jpg

دعنا نلقي نظرة على مثال صغير. إفترض أن لدينا النقطة (10,5,0) و نريد نقلها بالإتجاه (8,2,4-). تتم هذه العملية بالطريقة التالية (طبعا المنقولة Translated =):

post-133895-1246444073_thumb.jpg

إذن هذا سوف يعطينا النقطة (2,7,4). هذه النتيجة واضحة بشكل تام، ولكن النقطة التي يجب توضيحها هنا أننا قمنا بتحقيق ثلاث خصائص أساسية:

1) لدينا مصفوفة لكل عملية تحويل بسيطة

2) ضرب اي من هذه المصفوفات بإحداثيات نقطة سوف يعطينا نقطة جديدة مطبق عليها التحويل.

3) ضرب مصفوفتين ببعض سوف يعطينا مصفوفة جديدة، مقابلة لعمليتي التحويل، المرتبطتين بالمصفوفتين السابقتين. بمعنى أنه في حال قمنا بضرب نقطة بالمصفوفة الجديدة سوف نحصل على نقطة تم تطبيق التحويلين عليها.

بإمكاننا الآن أن نقول أن الإحداثي الرابع الذي تمت إضافته لا يحمل إطلاقا أي معنى هندسي. ولكن تم إستخدامه فقط من أجل السماح بتعريف مصفوفة للنقل، لها نفس شكل مصفوفات التحجيم و التدوير.

بهذا يمكننا أن ننهي هذه الدروس الثلاثة عن المصفوفات. ولكن هناك ملاحظة أخيرة يجب ذكرها: قد تصادف أحيانا أن قيمة الإحداثي الرابع ليست 1، كما هو الحال في النظرية هنا. في الحقيقة، القاعدة العامة تقول أنه يجب عليك ببساطة أن تقوم بقسمة الإحداثيات X,Y و Z على الإحداثي الرابع. دعنا نسميه الإحداثي W من الآن.

ببساطة: (20,10,0,2) = (10,5,0,1) كلاهما يمثل نفس النقطة الثلاثية الأبعاد (10,5,0). لذا القاعدة البسيطة لإشتقاق نقطة ثلاثية الأبعاد من 4 إحداثيات هي:

post-133895-1246444087_thumb.jpg

مرة أخرى :)

مترجم بواسطة خلدون خالد، من:

http://www.riemers.net/eng/ExtraReading/ma...geometrical.php

#11
اقتباس
هناك سؤال محيّر .. قد أكون متسرعا في طرحه :

Homogeneous Matrix ؟

مافائدتها ..

أتوقع وصلت الإجابة أخ شمري (ولو بعد حين:) )

اقتباس
ياريت تتحفنا بدرس عن المتجهات و تطبيقاتها الفعلية . مو بس نظريات

التطبيق موجود في سلسلة دروس ال Xna ثنائية الأبعاد و سوف نتطرق للتطبيق في سلاسل الدروس الثلاثية الأبعاد القادمة إن شاء الله

اقتباس
ما شاء الله جهد رائع وبارك الله فيك

شكرا جزيلا لك :)

#12

اشكرك كثيرا علي الموضوع

الموضوع مفيد جدا و اكرر شكري

:wink:

#13

بارك الله فيك .. موضوع جميل ومرتب , يبدو لي أن السلسلة انتهت ( الخاصة بالمصفوفات ) .

اقتباس
بإمكاننا الآن أن نقول أن الإحداثي الرابع الذي تمت إضافته لا يحمل إطلاقا أي معنى هندسي. ولكن تم إستخدامه فقط من أجل السماح بتعريف مصفوفة للنقل، لها نفس شكل مصفوفات التحجيم و التدوير.

هكذا تريحني .. :) .

في الحقيقة رايت " شخابيط " لم افهمها كثيراً تحاول أن تقول أن الاحداثي الرابع يمكن تمثيله هندسياً أو شيء من هذا القبيل . اذا وجدت الصورة سأعرضها هنا ..

المهم :

هناك سؤال لطيف , عرفت اجابته فقط قبل مدة ,

لماذا مصفوفة الازاحة Translation تظهر هكذا :

post-133895-1246444067.jpg

لماذا اخترنا بالتحديد هذا الشكل , ( غير أنه يبدو مرتّب :D ) .

وأيضا نفس السؤال " ينسحب" :D على بقيّة الأنواع ( Scaling و Rotation ) .

تم تعديل هذه المشاركة بواسطة الشمري في 1 يوليو 2009 في 17:18

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#14

السلام عليكم ورحمة الله

اقتباس
لماذا اخترنا بالتحديد هذا الشكل , ( غير أنه يبدو مرتّب ) .

وأيضا نفس السؤال " ينسحب" على بقيّة الأنواع ( Scaling و Rotation ) .

حتى تحصل على الاجابة ، تابع معي المثال التالي

ساعرض المثال بالابعاد الثنائية x,y للتبسيط فقط، لذلك من يفهم على تمثيل البعدين، سيكون بإمكانه تخيل الطريقة للابعاد الثلاثة بسهولة.

لو افترضنا النقطة (x1,y1) هي النقطة التي نريد نقلها بمقدار tx باتجاه محور x و بمقدار ty باتجاه محور y ، لينتج عندنا النقطة الجديدة (x2,y2)

post-68609-1246466297_thumb.jpg

الطريقة البسيطة للحصول على الاحداثيات الجديدة كالتالي:

x2 = x1+tx

y2 = y1+ty

والآن لو مثلنا النقطة الاصلية بمصفوفة

post-68609-1246467175_thumb.jpg

والنقطة الهدف بمصفوفة

post-68609-1246469176_thumb.jpg

والنقل بمصفوفة

post-133895-1246444067.jpg

وضربنا مصفوفة النقل بمصفوفة النقطة الاصلية ووضعنا الجواب في مصفوفة النقطة الهدف

فسيتنج في النهاية

x2 = x1+tx

y2 = y1+ty

وهي نفس المعادلات التي ذكرتها في البداية

إذن الترتيب في مصفوفة النقل (translation) جاء بحيث عندما نضرب المصفوفتين نحصل على نفس المعادلة في حالة لو تم حسابها هندسياً.

لنأتي لمصفوفة الدوران

مصفوفةالدوران جاءت بناء على معادلة الدائرة:

post-68609-1246468227_thumb.jpg

post-68609-1246468508_thumb.jpg

فلو ضربنا مصفوفة الدوران بمصفوفة النقطة سنحصل على نفس النتيجة:

post-68609-1246468508_thumb.jpg

وبنفس الطريقة لمصفوفة التكبير والتصغير

post-68609-1246468929_thumb.jpg

خلاصة القول، انه تم وضع المصفوفات بحيث انه عند ضرب المصفوفة بمتجه نحصل على نفس النتيجة اذا تم حسابها هندسياً.

ارجو ان اكون وضحت بشكل كافٍ :rolleyes:

تم تعديل هذه المشاركة بواسطة Amjad.IT في 1 يوليو 2009 في 20:48

1
#15

10/10 .

بارك الله فيك أخوي أمجد , على العموم , كنت قد رسمت رسمة توضيحية , تشرح طريقة الازاحة .. كما وضّحها الاخوة ( خالد + امجد ) ( لم تأت بجديد , ولكن لزيادة التوضيح ) :

post-42837-1246481621_thumb.jpg

في الصورة السابقة ( لو غيّرت معاملات X, Y ) , وجعلت قيم الازاحة ( الثوابت tX,tY ) صفراً .. لنتجت لك مصفوفة التحجيم Scaling , طبعاً المصفوفة الناتجة ( Scaling ) مربّعة , 2×2 , لذلك لاحاجة " نظرياً" لتحويلها الى مصفوفة متجانسة ,3×3 , ولكن لأن مصفوفة الازاحة صارت 3×3 , كان لابد من تحويل مصفوفة التحجيم أيضاً إلى 3×3 ...حتى يمكننا ضرب المصفوفات مع بعض( Rotation و Scaling و Translation ) .. طبعاً هنا نتكلّم عن عالم ثنائي البعد , ويمكن تعميم الفكرة بنفس الطريقة .. مع العالم ثلاثي البعد .

طيّب , سؤال آخر :D :

معادلة الدوران :

post-68609-1246468508.jpg

من أين ظهرت لنا بهذا الشكل النهائي كيف تم استنباطها ( طبعاً نتكلّم عن دوران حول نقطة ( حول المحور Z ) )

تم تعديل هذه المشاركة بواسطة الشمري في 2 يوليو 2009 في 00:10

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#16

ماشاء الله عليكم أنتما الإثنان

بالنسبة للسؤال الثاني ، هالمره أكييد اللجوء لأمجد من أجل الحصول على الإجابة. لأنك يا أستاذ شمري بلشت بمناقشة عدوي الألد (الرياضيات :) )

#17

شكرا لك اخي الشمري على توضيحك

اقتباس
بالنسبة للسؤال الثاني ، هالمره أكييد اللجوء لأمجد من أجل الحصول على الإجابة. لأنك يا أستاذ شمري بلشت بمناقشة عدوي الألد (الرياضيات )

الرياضيات من اجمل العلوم عندما نطبقها في المجالات الاخرى :) حيث نرى التطبيق الفعلي لقوانين ومفاهيم الرياضيات

نأتي للسؤال -_-

في الحقيقة لم ارد ان اتطرق لهذا الموضوع في ردي السابق حتى لا ازيد الامور تعقيداً (مع أنها غير معقدة :))

كما ذكرت سابقاً تم استنباط هذه القوانين من معادلة الدائرة.

:calc:

انظر للشكل التالي

post-68609-1246542379_thumb.gif

من القوانين المثلثية:

:calc:

لاحظ الشكل التالي

post-68609-1246542396_thumb.gif

ما نريده نحن في الدوران هو الحصول على احداثيات :D فقد ارهقتني كتابتها ، فأرجو ان لا تختلط عليكم وان تكون واضحة ومرتبة :)

وأي استفسار انا جاهز

تم تعديل هذه المشاركة بواسطة Amjad.IT في 2 يوليو 2009 في 16:51

#18

رائع أمجد :D , ماشاء الله ,

شرحك أفضل من شرح دكتوري العزيز .

عموما يبدو لي أن هناك خطأ مطبعي هنا .. ( على ما أظن ) :

اقتباس
معادلة الدائرة التي استنبطناها (المعادلات 1،2) لا يمكن ان نعوض فيها مباشرة، لأن القانون تم استنباطه على اعتبار ان الزاوية تقع بين محور السينات والخط الواصل بين نقطة الاصل والنقطة x2,y2

أعتقد تقصد x1,y1 , أو أني لم أفهم :D .

تم تعديل هذه المشاركة بواسطة الشمري في 2 يوليو 2009 في 17:08

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#19

حياك الله اخي

اقتباس
عموما يبدو لي أن هناك خطأ مطبعي

لا ليس خطأ وإنما كان مقصوداً

سأوضح لك ذلك

بشكل عام، اذا اردنا احداثيات نقطة x,y على محيط دائرة، فإنه يلزمنا معرفة الزاوية بين محور السينات والخط الواصل بين نقطة الاصل والنقطة x,y.

نحن نريد حساب احداثيات النقطة الجديدة x2,y2 ،

لحساب الاحداثيات مباشرة باستخدام معادلة الدائرة، يجب ان نعوض th1+th2 ولا يمكن ان نعوض th2 لوحدها. فحسب ما ذكرت سابقاً الزاوية المقصودة في المعادلة هي th1+th2

وكون النقطة x1,y1 هي نقطة معروفة لدينا مسبقاً فلن نحتاج لحسابها ولن نحتاج لقيمة th1 اصلا.

تم تعديل هذه المشاركة بواسطة Amjad.IT في 2 يوليو 2009 في 18:12

مواضيع مشابهة