Concave -> Convex
|
عضو فعال
تاريخ التسجيل: 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 |
|
عضو فعال
تاريخ التسجيل: 2007-06-07 مشاركات: 1179
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الخامسة الاختصاص: ذكاء صنعي
|
كفو يامن .. ما شاء الله عليك ... بتذكر هي الخوارزمية احتجناها بمشروع الحسابات العلمية السنة الماضية ... بس آخر شي اعملنا جهدنا نشتغل بلاها مشان ما نكتبها ... مشان قصة كيف بتعرف انو المضلع 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!"
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 771
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
مشكور اخي Tornado على المشاركة المفيدة
بالنسبة لفائدة هي الخوارزمية بحالتي هي استخدامها لكشف التصادم مع خوارزمية GJK لانها بتتعامل مع ال Convex Objects فقط
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 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!"
|
| |
دخول أو تسجيل لإرسال التعليقات |
تاريخ التسجيل: 2006-01-11 مشاركات: 110
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
الله يعطيك العافية انشا الله على هالشغل...... بالنسبة للأجسام الثلاثية الأبعاد بما أنو عم تنرسم على أساس مثلثات فممكن نستخدم خوارزميتك عند كل مثلث عم ينرسم ما بعرف إذا صح؟؟؟؟ على كل حال هي فكرة مبدئية انشا الله الله بيسرلي اشتغل فيها بس ليخلص مشروع الحسابات على خير
Don't sad !!! tomorrow will be better
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 771
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
فعلا متل ما قلت , لهلق ما شفت خوارزمية بتتعامل مع مضلعات معقرة
بس شفت برامج بتستخدم خوارزميات ذكية لتحويل جسم مقعر لعدة مضلعات محدبة
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 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 حدا فهم شي؟؟؟!! حاولت عبر بس أنا لما قريتها فتت بالحيط !!!
{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 771
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
~
اخ رامي فيك تعطينا شرح اوضح شوي خصوصي عند استخدام العمليات الرياضية (نوع العملية)
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 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
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 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 الشعاع الناتج من جداء الشعاعين السابقين يكون عمودي على مستوي هذين الشعاعين، ويكون اتجاهه إما للأعلى أو للأسفل تبعاً للزاوية المحصورة بين الشعاعين نعود ونطبق هذه العملية عند كل نقطة ونوجد حاصل جداء الشعاعين المتلاقيين عندها بعدها نأخذ الأشعة الناتجة ويمكن تقسيمها إلى مجموعتين مجموعة النقاط التي تتجه فيها الأشعة الناتجة من عملية الضرب للأعلى و مجموعة النقاط التي تتجه فيها الأشعة الناتجة من عملية الضرب للأسفل المجموعة ذات العدد الأقل هي مجموعة النقاط المحدبة :-) ولك قاعدة استثناء فيمكن أن ينتج لدينا مجموعتان لهما نفس العدد مثل الشكل النجمي الموجود في الأعلى فرؤوس النجمة الأشعة الناتجة عندها تكون باتجاه للأعلى أما النقاط الداخلية تكون الأشعة الناتجة متجهة نحو الأسفل لاحظ أننا نستعمل فضاء ثلاثي البعد عند ورود هذه الحالة يمكننا فحص وقوع نقطة داخل مضلع فنختار نقطة من أحد المجموعتين ونفحص وقوعها داخل المضلع المشكل من نقاط المجموعة الأخرى فنحدد بذلك جماعة النقاط المشكلة للمضلع المحدب
{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2004-03-28 مشاركات: 1291
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: ماجستير الاختصاص: هندسة برمجيات
|
هذه الطريقة فعالة وذات تعقيد جيد فنحن نمر على نقط المضلع مرة واحدة -تقريباً- ومستخدمة في التطبيقات الحقيقية
متل يللي عم نشتغل عليها :-)
{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 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
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2004-03-28 مشاركات: 1291
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: ماجستير الاختصاص: هندسة برمجيات
|
كتب M-RAY-Y: يارجل قول انو العملية CrossProduct هلق فهمت عليك
مشكور كتير اخي M-Ramy ..
العملية CrossProduct 
عفواً، أهلا وسهلا
الزاوية ممكن تكون منعكسة أي الزاوية المكملة للزاويد الحادة وهيك بيكون اتجاه الشعاع مختلف
{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 771
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
طب هيك منكون للق حددنا النقاط , بس في مشكلة .. كيفية وصيل هي النقاط على شكل مثلثات!
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2004-03-28 مشاركات: 1291
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: ماجستير الاختصاص: هندسة برمجيات
|
كتب M-RAY-Y: طب هيك منكون للق حددنا النقاط , بس في مشكلة .. كيفية وصيل هي النقاط على شكل مثلثات!
مرقها للـ openGL وهية بتشوف شغلها
أي مكتبة 3D بتأمنلك عملية الرسم على شكل مثلثلات وإذا بدك بعملك رندرة لملأ المضلع كللو
{وماكان الله ليعذبهم وأنت فيهم وماكان الله معذبهم وهم يستغفرون}
|
| |
دخول أو تسجيل لإرسال التعليقات |
|
عضو فعال
تاريخ التسجيل: 2005-10-11 مشاركات: 771
الجامعة: دمشق الكلية: الهندسة المعلوماتية المرحلة: السنة الرابعة الاختصاص: ذكاء صنعي
|
صدك تكون ك Polygon ساعتها مشكلة..
اساسا لازم يعرف ترتيب رسم الرؤوس , هي شغلة
وتاني شغلة لازم اعرف المثلثات مشان استخدام خوارزميات هلي بتخص ال Convex
C++ is Not a programming language , C++ is a Way Of Life
|
| |
دخول أو تسجيل لإرسال التعليقات |
|