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

ويسمى المنحنى الظاهر بالصورة بمنحنى بيزير الدرجة الثالثة لأنها تتكون من أربعة نقاط ولو تأملنا في معادلتها عندما تمر بنا سنجد إنها من الدرجة الثالثة أيضا وكذلك منحنيات الثلاث نقاط هي منحنيات درجة ثانية وهكذا وفق القاعدة ن-1 حيث ن تساوي عدد نقاط منحنى بيزير .
ايجاد معادلات منحنى بيزير:
اذا علمت التالي
t=0…1 و n هي درجة المنحنى و p0…pn هي نقاط التحكم والبداية والنهاية فإن
B(t)=
نجد مفكوك نظرية ذات الحدين للدالة
((1-t)+t)^n
ثم نضرب كل حد من حدود مفكوكتها ب P0 الى Pn ابتداء من حدها الأول .
اذا فإن المعادلة العامة لمنحنى بيزير كالتالي:-

ملاحظة:انقر على المعادلة في الأعلى لتراها بشكل أوضح.
مثال اوجد معادلة منحنى بيزير من الدرجة الثالثة
((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();
}
حمل الشيفرة المصدرية كاملة من هنا

