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

رسم منحنيات Bezier ومثال لها ب Opengl

بدأه مصفوفة في 14 يناير 2010 · 6 رد · 4,713 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

منحنيات بيزير :

قامت هذه المنحنيات على مبدأ ان هناك سلسلة من النقاط .

نقطتان تحددان البداية والنهاية وتسمى النقاط المحددة حيث انهما لوحدهما لا يشكلان أي انحناءة سوى خط مستقيم من نقطة البداية الى النهاية.

ثم يتوسطهم نقاط تدعى بنقاط التحكم لأنها هي من تتحكم بشكل المنحى وفق معادلات بيزير انظر الرسم .

bezier.png

ويسمى المنحنى الظاهر بالصورة بمنحنى بيزير الدرجة الثالثة لأنها تتكون من أربعة نقاط ولو تأملنا في معادلتها عندما تمر بنا سنجد إنها من الدرجة الثالثة أيضا وكذلك منحنيات الثلاث نقاط هي منحنيات درجة ثانية وهكذا وفق القاعدة ن-1 حيث ن تساوي عدد نقاط منحنى بيزير .

ايجاد معادلات منحنى بيزير:

اذا علمت التالي

t=0…1 و n هي درجة المنحنى و p0…pn هي نقاط التحكم والبداية والنهاية فإن

B(t)=

نجد مفكوك نظرية ذات الحدين للدالة

((1-t)+t)^n

ثم نضرب كل حد من حدود مفكوكتها ب P0 الى Pn ابتداء من حدها الأول .

اذا فإن المعادلة العامة لمنحنى بيزير كالتالي:-

8057cd4e32ac493d87b1a725422e7aaa.png

ملاحظة:انقر على المعادلة في الأعلى لتراها بشكل أوضح.

مثال اوجد معادلة منحنى بيزير من الدرجة الثالثة

((1-t)+t)^3=((1-t)^3)+(3(1-t)^2 * t )+(3(1-t) * t^2)+ (t^3)

ومنه فإن معادلة منحنى بيزير من الدرجة الثالثة لكل t=0…1 هي التالي

B(t)=((1-t)^3)P0+(3(1-t)^2 * t )P1+(3(1-t) * t^2)P2+ (t^3)P3

X(t)= ((1-t)^3)x0+(3(1-t)^2 * t )x1+(3(1-t) * t^2)x2+ (t^3)x3

Y(t)= ((1-t)^3)y0+(3(1-y)^2 * t )y1+(3(1-t) * t^2)y2+ (t^3)y3

ترجمة المعادلات الى رسوميات ب openGL:

//الدرجة الثالثة
void GLWidget::draw3LevelCurve(QPoint p0,QPoint p1,
                               QPoint p2,QPoint p3)
{
    double m=1;//m=1-t
    double x,y;//احداثيات نقاط المنحنى
    glBegin(GL_LINE_STRIP);
    //تكرار من 0 الى 1 بمقدار 1 من 100 في كل مرة
    for(double t=0;t<=1;t+=0.01)
    {
        m=1-t;//m=1-t   t=0...1
        // مفكوكة الدرجة الثالثة من منحنى بيزير x
        x= pow(m,4)*p0.x() + 
           3*pow(m,2)*pow(t,1)*p1.x() + 
           3*pow(m,1)*pow(t,2)*p2.x() + 
           pow(t,4)*p3.x();

        //مفكوكة الدرجة الثالثة من منحنى بيزير y
        y= pow(m,4)*p0.y() +
           3*pow(m,2)*pow(t,1)*p1.y() + 
           3*pow(m,1)*pow(t,2)*p2.y() + 
           pow(t,4)*p3.y();

        glVertex3d(x,y,0);
    }
    glEnd();
}

//الدرجة الرابعة
void GLWidget::draw4LevelCurve(QPoint p0,QPoint p1,
                               QPoint p2,QPoint p3,QPoint p4)
{
    double m=1;//m=1-t
    double x,y;//احداثيات نقاط المنحنى
    glBegin(GL_LINE_STRIP);
    //تكرار من 0 الى 1 بمقدار 1 من 100 في كل مرة
    for(double t=0;t<=1;t+=0.01)
    {
        m=1-t;
           // yمفكوكة الدرجة الرابعة من منحنى بيزير
        x= pow(m,4)*p0.x() +
           4*pow(m,3)*t*p1.x() + 
           6*pow(m,2)*pow(t,2)*p2.x() + 
           4*m*pow(t,3)*p3.x() + 
           pow(t,4)*p4.x();

        // xمفكوكة الدرجة الرابعة من منحنى بيزير
        y= pow(m,4)*p0.y() + 
           4*pow(m,3)*t*p1.y() + 
           6*pow(m,2)*pow(t,2)*p2.y() + 
           4*m*pow(t,3)*p3.y() +
           pow(t,4)*p4.y();

        glVertex3d(x,y,0);
    }
    glEnd();
}

beziercurve.jpg

حمل الشيفرة المصدرية كاملة من هنا

2

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

مدونة دوال

كيوتي العربي

#2

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

المقالة ضمن فهرس القسم .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4

الله يبارك في جهودك استاذ عبدالله الشمري .

استاذ خلدون لا حاجة للرياضيات يكفيك التعامل مع الدرجة الثانية والثالثة .

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

وأكاد اجزم انه ليس هناك مكتبات تتعامل مع الدرجات الرابعة ومافوقها .

والسلام عليكم

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

مدونة دوال

كيوتي العربي

#5

السلام عليكم

شرح رائع بارك الله فيك

#6

السلام عليكم كنت احتاج لهذا بشدة والحمدلله وجدته

شكراً أخي وبارك الله فيك

#7

جيد

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg

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