Concave -> Convex

أرسل من قبل M-RAY-Y في الإثنين, 2008/01/07 - 1:53pm.
عضو فعال
صورة M-RAY-Y

تاريخ التسجيل: 2005-10-11
مشاركات: 771

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

السلام عليكم

اول الشي انشاء الله الجميع موفق بالفحوصات , وصراحة كنت متردد نزل الموضوع بس اتشجعت بما انو القسم انفتح

الموضوع بيخص الخوارزميات وال Graphics

من فترة كنت عم فكر بتحويل جسم Concave الى Convex ولقيت الفكرة حلوة فحبيت شارك الشباب فيها

انا كتبت من جهتي خوارزمية للتحويل بس للاجسام ال 2D

مثال عن الخرج:

-شكل النجمة هو الدخل والخرج هو المضلع الحيط به -
-النقطة الخضراء تمثل اول نقطة والزرقاء تمثل النقطة التي تليها فقط لتوضيح اتجاه الرسم-

نص الكود مرفق,

بس فيها مشكلة انها بتحول الاجسام هلي نقاطها بعكس عقارب الساعة (عملية ال Cross product)
, انا صراحة ما بعرف طريقة اكتشاف اذا كان الجسم مع عقارب الساعة, اذا حدا بيعرف هيك خوارزمية فياريت يدلني..

ورجونا شطارتكون مع الاجسام ال 3D مع العلم انو عادة بيكون تمثيل الاجسام ال 3D كمثلثات Triangles

C++ is Not a programming language ,
C++ is a Way Of Life

 
دخول أو تسجيل لإرسال التعليقات | قراءة: 488

خيارات عرض التعليقات

اختر طريقتك المفضلة لعرض التعليقات و اضغط "حفظ الإعدادات" لتفعيل تغييراتك.
الإثنين, 2008/01/07 - 2:47pm
عضو فعال

تاريخ التسجيل: 2007-06-07
مشاركات: 1179

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الخامسة
الاختصاص: ذكاء صنعي

 كفو يامن .. ما شاء الله عليك ...

بتذكر هي الخوارزمية احتجناها بمشروع الحسابات العلمية السنة الماضية ... بس آخر شي اعملنا جهدنا نشتغل بلاها مشان ما نكتبها Mr. Green ...

مشان قصة كيف بتعرف انو المضلع clockwise أو counter-clockwise ..

شوف هالرابط ممكن يفيدك

http://www.physicsforums.com/archive/index.php/t-191576.html 

"Make me a sandwich"

"What? make it yourself"

"SUDO me a sandwich"

"Yes sir!"

Mr. Green

 
دخول أو تسجيل لإرسال التعليقات
الثلاثاء, 2008/01/08 - 2:28pm
عضو فعال
صورة M-RAY-Y

تاريخ التسجيل: 2005-10-11
مشاركات: 771

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

مشكور اخي Tornado على المشاركة المفيدة

بالنسبة لفائدة هي الخوارزمية بحالتي هي استخدامها لكشف التصادم مع خوارزمية GJK لانها بتتعامل مع ال Convex Objects فقط

C++ is Not a programming language ,
C++ is a Way Of Life

 
دخول أو تسجيل لإرسال التعليقات
الثلاثاء, 2008/01/08 - 2:36pm
عضو فعال

تاريخ التسجيل: 2007-06-07
مشاركات: 1179

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الخامسة
الاختصاص: ذكاء صنعي

كتب M-RAY-Y:
مشكور اخي Tornado على المشاركة المفيدة بالنسبة لفائدة هي الخوارزمية بحالتي هي استخدامها لكشف التصادم مع خوارزمية GJK لانها بتتعامل مع ال Convex Objects فقط

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

بس طبعا النتيجة ما رح تكون دقيقة .. صح ؟ 

"Make me a sandwich"

"What? make it yourself"

"SUDO me a sandwich"

"Yes sir!"

Mr. Green

 
دخول أو تسجيل لإرسال التعليقات
الثلاثاء, 2008/01/08 - 2:41pm
صورة the soul

تاريخ التسجيل: 2006-01-11
مشاركات: 110

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

 الله يعطيك العافية انشا الله على هالشغل......

بالنسبة للأجسام الثلاثية الأبعاد بما أنو عم تنرسم على أساس مثلثات فممكن نستخدم خوارزميتك عند كل مثلث عم ينرسم

ما بعرف إذا صح؟؟؟؟ على كل حال هي فكرة مبدئية انشا الله الله بيسرلي اشتغل فيها بس ليخلص مشروع الحسابات على خير

Don't sad !!! tomorrow will be better

 
دخول أو تسجيل لإرسال التعليقات
الثلاثاء, 2008/01/08 - 2:41pm
عضو فعال
صورة M-RAY-Y

تاريخ التسجيل: 2005-10-11
مشاركات: 771

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

فعلا متل ما قلت , لهلق ما شفت خوارزمية بتتعامل مع مضلعات معقرة

بس شفت برامج بتستخدم خوارزميات ذكية لتحويل جسم مقعر لعدة مضلعات محدبة

C++ is Not a programming language ,
C++ is a Way Of Life

 
دخول أو تسجيل لإرسال التعليقات
الثلاثاء, 2008/01/08 - 5:52pm
عضو فعال
صورة M-Ramy

تاريخ التسجيل: 2004-03-28
مشاركات: 1291

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: ماجستير
الاختصاص: هندسة برمجيات

فكرة حلوة
بس الأفضل استخدام الفضاء الشعاعي بهيك حالة
توصيف مبدئي:

The polygon points are divided into 2 groups: non convex points, and convex points, and there are 2 possible directions, one for convex points and the other for non convex points.
if we chose direction vector from
point(i) to point(i+1) as V(i,i+1). // a vector

The direction at point i:
direction = v(i-1,i) * v(i,i+1)  // a vector mul

Now we can calculate the first vector:

convexVector =(*point(i)-*point((i-1+nOfPoints)%nOfPoints)) *(*point((i+1)%nOfPoints)-*point(i)); // applying vector space operations

Did u see what is this :-D

nonConvexVector = - convexVector; // the non convex vector

We intialized two vectors, now we should loop all the points and see each small vector between each teo adjacent points, then we compare this small vector with the two base vextores

حدا فهم شي؟؟؟!!

حاولت عبر بس أنا لما قريتها فتت بالحيط !!!

{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}

 
دخول أو تسجيل لإرسال التعليقات
الثلاثاء, 2008/01/08 - 6:50pm
عضو فعال
صورة M-RAY-Y

تاريخ التسجيل: 2005-10-11
مشاركات: 771

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

~

اخ رامي فيك تعطينا شرح اوضح شوي خصوصي عند استخدام العمليات الرياضية (نوع العملية)

C++ is Not a programming language ,
C++ is a Way Of Life

 
دخول أو تسجيل لإرسال التعليقات
الأربعاء, 2008/01/09 - 2:06pm
عضو فعال
صورة M-RAY-Y

تاريخ التسجيل: 2005-10-11
مشاركات: 771

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

السلام عليكم

خطرت ببالي طريقة لمعرفة ترتيب نقاط المضلع عن طريق حساب مساحته

حيث طريقة حساب مساحة اي جسم مضلع :(مثلا مثلث)

S=0.5*(a.y*b.x + b.y*c.x - a.x*b.y - b.x*c.y)
 
فاذا كانت المساحة سالبة فبيكون ترتيب النقاط بالعكس ومنعود منضرب قيمة sa بالخوارزمية ب -1
 
ملاحظة : sa تمثل cos الزاوية بين ثلاث نقاط فاذا كان قيمته -1 فبتكون الزاوية اكبر من 180 درجة

C++ is Not a programming language ,
C++ is a Way Of Life

 
دخول أو تسجيل لإرسال التعليقات
الأربعاء, 2008/01/09 - 4:53pm
عضو فعال
صورة M-Ramy

تاريخ التسجيل: 2004-03-28
مشاركات: 1291

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: ماجستير
الاختصاص: هندسة برمجيات

سنعتمد الفضاء الشعاعي
عند كل نقطة في المضلع يوجد شعاعان، مثلاً ليكن المضلع:
Polygon: p1, p2, p3, p4, p5

We pick the first point p1
We have here two vectors
V1(p1, p2), V2(p5, p1) // there is a line between the last and the first point

Now we apply the multiplication between these two vectors
We got a vector VResult
الشعاع الناتج من جداء الشعاعين السابقين يكون عمودي على مستوي هذين الشعاعين، ويكون اتجاهه إما للأعلى أو للأسفل تبعاً للزاوية المحصورة بين الشعاعين

نعود ونطبق هذه العملية عند كل نقطة ونوجد حاصل جداء الشعاعين المتلاقيين عندها

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

المجموعة ذات العدد الأقل هي مجموعة النقاط المحدبة
:-)
ولك قاعدة استثناء
فيمكن أن ينتج لدينا مجموعتان لهما نفس العدد
مثل الشكل النجمي الموجود في الأعلى

فرؤوس النجمة الأشعة الناتجة عندها تكون باتجاه للأعلى
أما النقاط الداخلية تكون الأشعة الناتجة متجهة نحو الأسفل
لاحظ أننا نستعمل فضاء ثلاثي البعد

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

{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}

 
دخول أو تسجيل لإرسال التعليقات
الأربعاء, 2008/01/09 - 4:54pm
عضو فعال
صورة M-Ramy

تاريخ التسجيل: 2004-03-28
مشاركات: 1291

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: ماجستير
الاختصاص: هندسة برمجيات

هذه الطريقة فعالة وذات تعقيد جيد فنحن نمر على نقط المضلع مرة واحدة -تقريباً- ومستخدمة في التطبيقات الحقيقية

متل يللي عم نشتغل عليها :-)

{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}

 
دخول أو تسجيل لإرسال التعليقات
الجمعة, 2008/01/11 - 2:44pm
عضو فعال
صورة M-RAY-Y

تاريخ التسجيل: 2005-10-11
مشاركات: 771

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

يارجل قول انو العملية CrossProduct هلق فهمت عليك

على فكرة في الكود السابق استخدمت عملية ال Cross Product لتحديد الزاوية , استخدمتها على ال 2D Vectors على اعتبار انها 3D بس المركبة الثالثة تساوي الصفر..

بس انا بظن انو اتجاه الاشعة لازم يكون دوما موجب اذا كان اتجاه الذرى عكس عقارب الساعة وبتكون الزاوية المحصورة اصغر من 180 درجة

مشكور كتير اخي M-Ramy ..

C++ is Not a programming language ,
C++ is a Way Of Life

 
دخول أو تسجيل لإرسال التعليقات
الجمعة, 2008/01/11 - 4:08pm
عضو فعال
صورة M-Ramy

تاريخ التسجيل: 2004-03-28
مشاركات: 1291

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: ماجستير
الاختصاص: هندسة برمجيات

كتب M-RAY-Y:
يارجل قول انو العملية CrossProduct هلق فهمت عليك

مشكور كتير اخي M-Ramy ..

العملية CrossProduct Smile

عفواً، أهلا وسهلا

الزاوية ممكن تكون منعكسة أي الزاوية المكملة للزاويد الحادة وهيك بيكون اتجاه الشعاع مختلف

{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}

 
دخول أو تسجيل لإرسال التعليقات
السبت, 2008/01/12 - 7:48pm
عضو فعال
صورة M-RAY-Y

تاريخ التسجيل: 2005-10-11
مشاركات: 771

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

طب هيك منكون للق حددنا النقاط , بس في مشكلة .. كيفية وصيل هي النقاط على شكل مثلثات!

C++ is Not a programming language ,
C++ is a Way Of Life

 
دخول أو تسجيل لإرسال التعليقات
الأحد, 2008/01/13 - 11:19am
عضو فعال
صورة M-Ramy

تاريخ التسجيل: 2004-03-28
مشاركات: 1291

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: ماجستير
الاختصاص: هندسة برمجيات

كتب M-RAY-Y:
طب هيك منكون للق حددنا النقاط , بس في مشكلة .. كيفية وصيل هي النقاط على شكل مثلثات!

مرقها للـ openGL وهية بتشوف شغلها
أي مكتبة 3D بتأمنلك عملية الرسم على شكل مثلثلات وإذا بدك بعملك رندرة لملأ المضلع كللو

{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}

 
دخول أو تسجيل لإرسال التعليقات
الإثنين, 2008/01/14 - 9:43pm
عضو فعال
صورة M-RAY-Y

تاريخ التسجيل: 2005-10-11
مشاركات: 771

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الرابعة
الاختصاص: ذكاء صنعي

صدك تكون ك Polygon ساعتها مشكلة..
اساسا لازم يعرف ترتيب رسم الرؤوس , هي شغلة
وتاني شغلة لازم اعرف المثلثات مشان استخدام خوارزميات هلي بتخص ال Convex

C++ is Not a programming language ,
C++ is a Way Of Life

 
دخول أو تسجيل لإرسال التعليقات