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

منحنيات Bezier

بدأه مصفوفة في 17 سبتمبر 2008 · 5 رد · 3,911 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

مقدمة :

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

وبما ان هذه المنحنيات اصبحت متعارف عليها في جميع مكاتب التصميم ولغات البرمجة وبرامج التصميم من ثنائي البعد وثلاثي البعد أرتأيت ان اشرح هذا الإسلوب من المنحنيات الحرة ليكون اول مقال عربي يتحدث عن هذا الموضوع .

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

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

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

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

انظر الرسم

800px-Bezier_curve.svg.png

فالنقاط P0 و P3 تعتبر محددتا المنحنى والنقاط P1 و P2 تسمى نقاط التحكم .

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

================================================================================

=======

كيف يرسم الحاسب هذه المنحنيات ؟

الفكرة هي استخدام " elegant recursive procedure" الإجرار التكراري .

فمثلا عند رسم الخط المستقيم .

1- تلوين البكسلات عند نقاط البداية والنهاية . .

2- تلوين النقطة في الوسط .

3- تقسيم الخط الى نصفين .

4- تنفيذ الخطوتين 2 و 3 على كل من النصفين .

الى ان لايمكن تمييز البكسات في الخط .

وعلى هذا المبدأ يقوم الحاسب برسم منحنيات بيريز

فمثلا لو لدينا النقاط P0, P1/3, P2/3, P1 حيث النقاط المحددة هنا هي P0 و P1

فإنه يتم تلوين كل من النقاط المحدد كخطوة أولى ومن ثم تحديد الوسط عن طريق

P1/6 = في الوسط بين P0 وP1/3

P5/6 = في الوسط بين P2/3 و P1

Q = في الوسط بين P1/3 و P2/3

P2/6 = في الوسط بين P1/6 و Q

P4/6 = في الوسط بين Q و P5/6

P1/2 = في الوسط بين P2/6 و P4/6

كما في الشكل التالي

56606741wi4.jpg

لنرسم فوقها نقطة الوسط

ونقسم الشكل الى نصفين الأول

P0 و P1/6 و P2/6 و P1/2 .

والثاني P1/2 و P4/6 و P5/6 وينتهي ب P1 .

لنقوم بعد ذلك بتكرار الخطوتين الثانية الثالثة في النصفين الى ان نحصل على منحنى يسمى منحنى بيزير .

============================================================================

============================================================================

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

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

ويمكننا تعريف معادلتها في صيغة عامة حيث درجة منحنى بيزير = n والنقاط من , P1, P0 الى Pn

اذا :

مفكوكة نظرية ذات الحدين B(t)=((1-t)+t)^n حيث يضرب كل حد من حدود مفكوكتها ب P0 الى Pn ابتداء من حدها الأول .

ومنه

ee540a45155c347d28adddfvm8.png

حيث Xn-X0) t =(X-X0)/(ومنه فإن قيمته تنحصر بين [0,1]

ومنه فإن Pn=Yn

او اذا تم تستبدال X ب Y في t فإن Pn=Xn

ومن هذه المعادلات نستنتج ان

P(0) = y0

P(n) = yn

مثال : اوجد مفكوكة منحنى بيزير من الدرجة الثالثة .

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

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

((1-t)^3)P0+(3(1-t)^2 * t )P1+(3(1-t) * t^2)P2+ (t^3)P3 B(t)= لكل t=[0,1]

ومن خصائص منحنيات بيزير

ان ميل مماس المنحنى عند نقطة P0 =V0= (Y1-Y0)/(X1-X0)

ومنهV0 Y1=Y0+(X1-X0)*

وكذلك

ان ميل مماس المنحنى عند نقطة Pn =Vn= (Yn-Yn-1)/(Xn-Xn-1)

ومنهVn Yn-1=Yn-(Xn-Xn-1)* . حيث درجة منحنى بيزير= n

==============================================================

محاكاة منحنيات مشهورة بإستخدام منحنيات بيزير .

للمعلومية ان المحاكاة هنا لايعني تطابق الرسم بنسبة 100% ولكن سوف تكون هناك إختلافات بسيطة لا تؤثر على الشكل العمومي للرسم .

ومن أحد أشهر أساليب المحاكاة تجزئة النقاط الى مسافات X متساوية لنحدد فيما بعد Y لكل نقطة بمعادلات تفاضلية .

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

مثال(1)

قم بمحاكاة قطع مكافئ من النقطة X=-1 الى X=1 .

فلو أكتفينا بالرسم بنقطتين تحكم + نقطتي التحديد فإن الحل:

معادلة القطع المكافئ الذي محوره y واتجاهه للأعلى هو X^2=4aY و a=1/4 بإفتراض

أن نقاط التحديد P0(-1,1) و P3(1,1)

المسافة بين X0,X3 = 2 .

ومنه نقسم المنحنى الى ثلاثة أقسام على X لتحديد نقاط التحكم على الإحداثي X وينتج ان المسافة بين كل نقطة ونقطة هو 2/3 اذا النقاط على المحورX هي X0=-1 ,X1=-1/3 ,X2=1/3 ,X3=1

ووفقا للمعادلتين

V0 Y1=Y0+(X1-X0)* و Vn Yn-1=Yn-(Xn-Xn-1)*

فإنه بالإمكان تحديد كل من النقطتين Y1 و Yn-1 .

ولكن علينا ايجاد dy/dx = 2X/4a

ومنه اذا علمنا مسبقا ان a=1/4 اذا dy/dx= 2X .

اذا الممال عند X0=-2 و عند X3=2

اذا=-1/3 (Y1=1+2/3*(-2

و

Y2=1-2/3*2=-1/3

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

P0(-1,1) و P3(1,1) و P1(-1/3,-1/3) و P2(1/3,-1/3)

44509877kf6.jpg

وإليكم بعض المراجع في المرفقات للأسف باللغة الإنجليزية فقط

محجوز :D

محجوز

Bezier_curves.pdf

cubemath.pdf

nishita_bezier_clipping.pdf

1

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

مدونة دوال

كيوتي العربي

#2

ولا يحلوا الذكر هنا الا مع Qt

فلذلك قمت ببرمجة هذا البرنامج البسيط انظر الصورة المتحركة

11965705qm9.gif

وهي تحتوي على الشيفرات التالية

ملف الرأس

 

 

[color= #007f00;]#ifndef __BEZIER_H__

[color= #007f00;]#define __BEZIER_H__

 

[color= #007f00;]#include<QtGui>

 

[color= #0000ff;]class bezier[color= #000000;]:[color= #0000ff;]public QGraphicsView[color= #000000;]{

   Q_OBJECT

   [color= #007f00;]//==============================================

   [color= #0000ff;]public[color= #000000;]:

   bezier[color= #000000;](QWidget[color= #000000;]* parent[color= #000000;]=[color= #ff0000;]0[color= #000000;]);

   [color= #0000ff;]void drawCurve[color= #000000;]([color= #000000;]);

   [color= #0000ff;]void drawLines[color= #000000;]([color= #000000;]);

   [color= #007f00;]//==============================================

   [color= #0000ff;]protected[color= #000000;]:

    [color= #0000ff;]void timerEvent [color= #000000;]( QTimerEvent [color= #000000;]* event [color= #000000;]) ;

   [color= #007f00;]//==============================================

   [color= #0000ff;]private[color= #000000;]:

   QGraphicsPathItem  curve;

   QGraphicsScene[color= #000000;]* scene;

   QList[color= #000000;]<QGraphicsEllipseItem[color= #000000;]*[color= #000000;]> points;

   QList[color= #000000;]<QGraphicsLineItem[color= #000000;]*[color= #000000;]> lines;

   [color= #0000ff;]bool check;

   [color= #007f00;]//==============================================

[color= #000000;]};

 

[color= #007f00;]#endif // __BEZIER_H

وملف الجسد

 

 

[color= #007f00;]#include "bezier.h"

 

bezier[color= #000000;]::[color= #808000;]bezier[color= #000000;](QWidget[color= #000000;]* parent[color= #000000;])[color= #000000;]:QGraphicsView[color= #000000;](parent[color= #000000;])[color= #000000;]{

   scene[color= #000000;]=[color= #0000ff;]new QGraphicsScene;

   QGraphicsEllipseItem[color= #000000;]* ellipse;

   scene[color= #000000;]-[color= #000000;]>setSceneRect[color= #000000;]([color= #ff0000;]0,[color= #ff0000;]0,[color= #ff0000;]500,[color= #ff0000;]500[color= #000000;]);

   setScene[color= #000000;](scene[color= #000000;]);

   scene[color= #000000;]-[color= #000000;]>setBackgroundBrush[color= #000000;](QBrush[color= #000000;](Qt[color= #000000;]::[color= #808000;]black[color= #000000;])[color= #000000;]);

   [color= #0000ff;]for[color= #000000;]([color= #0000ff;]int m[color= #000000;]=[color= #ff0000;]0;m[color= #000000;]<=[color= #ff0000;]3;m[color= #000000;]++[color= #000000;])[color= #000000;]{

      [color= #0000ff;]if[color= #000000;](m[color= #000000;]<[color= #ff0000;]2[color= #000000;])[color= #000000;]{

      ellipse[color= #000000;]=scene[color= #000000;]-[color= #000000;]>addEllipse[color= #000000;]([color= #ff0000;]0,[color= #ff0000;]0,[color= #ff0000;]6,[color= #ff0000;]6,Qt[color= #000000;]::[color= #808000;]DotLine,QColor[color= #000000;](Qt[color= #000000;]::[color= #808000;]white[color= #000000;])[color= #000000;]);

      ellipse[color= #000000;]-[color= #000000;]>setFlag[color= #000000;](QGraphicsItem[color= #000000;]::[color= #808000;]ItemIsMovable,[color= #ff0000;]1[color= #000000;]);

      ellipse[color= #000000;]-[color= #000000;]>moveBy[color= #000000;]([color= #000000;](m[color= #ff0000;]+1[color= #000000;])[color= #000000;]*[color= #ff0000;]150,[color= #ff0000;]200[color= #000000;]);

      ellipse[color= #000000;]-[color= #000000;]>setCursor[color= #000000;](Qt[color= #000000;]::[color= #808000;]SizeAllCursor[color= #000000;]);

      points[color= #000000;]<<ellipse;

      [color= #000000;]}

      [color= #0000ff;]else[color= #000000;]{

      ellipse[color= #000000;]=scene[color= #000000;]-[color= #000000;]>addEllipse[color= #000000;]([color= #ff0000;]0,[color= #ff0000;]0,[color= #ff0000;]6,[color= #ff0000;]6,Qt[color= #000000;]::[color= #808000;]DotLine,QColor[color= #000000;](Qt[color= #000000;]::[color= #808000;]white[color= #000000;])[color= #000000;]);

      ellipse[color= #000000;]-[color= #000000;]>setFlag[color= #000000;](QGraphicsItem[color= #000000;]::[color= #808000;]ItemIsMovable,[color= #ff0000;]1[color= #000000;]);

      ellipse[color= #000000;]-[color= #000000;]>moveBy[color= #000000;]([color= #000000;](m[color= #ff0000;]-1[color= #000000;])[color= #000000;]*[color= #ff0000;]200,[color= #ff0000;]400[color= #000000;]);

      ellipse[color= #000000;]-[color= #000000;]>setCursor[color= #000000;](Qt[color= #000000;]::[color= #808000;]SizeAllCursor[color= #000000;]);

      points[color= #000000;]<<ellipse;

      [color= #000000;]}

   [color= #000000;]}

   startTimer[color= #000000;]([color= #ff0000;]5[color= #000000;]);

   scene[color= #000000;]-[color= #000000;]>addItem[color= #000000;]([color= #000000;]&curve[color= #000000;]);

   drawCurve[color= #000000;]([color= #000000;]);

   drawLines[color= #000000;]([color= #000000;]);

[color= #000000;]}

[color= #007f00;]//=========================================================

[color= #0000ff;]void bezier[color= #000000;]::[color= #808000;]drawCurve[color= #000000;]([color= #000000;])[color= #000000;]{

   QPainterPath path;

   path.[color= #808000;]moveTo[color= #000000;](points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3[color= #000000;]);

   path.[color= #808000;]cubicTo[color= #000000;](points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>
x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3[color= #000000;]);

   curve.[color= #808000;]setPath[color= #000000;](path[color= #000000;]);

   curve.[color= #808000;]setPen[color= #000000;](QPen[color= #000000;](Qt[color= #000000;]::[color= #808000;]darkGreen,[color= #ff0000;]4[color= #000000;])[color= #000000;]);

[color= #000000;]}

[color= #007f00;]//=========================================================

[color= #0000ff;]void bezier[color= #000000;]::[color= #808000;]drawLines[color= #000000;]([color= #000000;])[color= #000000;]{

   [color= #0000ff;]if[color= #000000;](lines.[color= #808000;]count[color= #000000;]([color= #000000;])[color= #000000;]<[color= #ff0000;]3[color= #000000;])[color= #000000;]{

      lines[color= #000000;]<<scene[color= #000000;]-[color= #000000;]>addLine[color= #000000;](points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #000000;]+3
,QPen[color= #000000;](Qt[color= #000000;]::[color= #808000;]white,[color= #ff0000;]1,Qt[color= #000000;]::[color= #808000;]DotLine[color= #000000;])[color= #000000;]);

      lines[color= #000000;]<<scene[color= #000000;]-[color= #000000;]>addLine[color= #000000;](points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #000000;]+3
,QPen[color= #000000;](Qt[color= #000000;]::[color= #808000;]white,[color= #ff0000;]1,Qt[color= #000000;]::[color= #808000;]DotLine[color= #000000;])[color= #000000;]);

      lines[color= #000000;]<<scene[color= #000000;]-[color= #000000;]>addLine[color= #000000;](points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #000000;]+3
,QPen[color= #000000;](Qt[color= #000000;]::[color= #808000;]white,[color= #ff0000;]1,Qt[color= #000000;]::[color= #808000;]DotLine[color= #000000;])[color= #000000;]);

      lines[color= #000000;]<<scene[color= #000000;]-[color= #000000;]>addLine[color= #000000;](points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #000000;]+3
,QPen[color= #000000;](Qt[color= #000000;]::[color= #808000;]white,[color= #ff0000;]1,Qt[color= #000000;]::[color= #808000;]DotLine[color= #000000;])[color= #000000;]);

   [color= #000000;]}

   [color= #0000ff;]else[color= #000000;]{

       lines[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>setLine[color= #000000;](points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3[color= #000000;]);

       lines[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>setLine[color= #000000;](points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]0[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3[color= #000000;]);

       lines[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>setLine[color= #000000;](points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]1[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3[color= #000000;]);

       lines[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>setLine[color= #000000;](points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]2[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>x[color= #000000;]([color= #000000;])[color= #ff0000;]+3,points[color= #000000;][[color= #ff0000;]3[color= #000000;]][color= #000000;]-[color= #000000;]>y[color= #000000;]([color= #000000;])[color= #ff0000;]+3[color= #000000;]);

   [color= #000000;]}

[color= #000000;]}

[color= #007f00;]//========================================================

[color= #0000ff;]void bezier[color= #000000;]::[color= #808000;]timerEvent [color= #000000;]( QTimerEvent [color= #000000;]* event [color= #000000;]) [color= #000000;]{

   drawLines[color= #000000;]([color= #000000;]);

   drawCurve[color= #000000;]([color= #000000;]);

[color= #000000;]}

وملف الشيفرت بالمرفقات

src.zip

تم تعديل هذه المشاركة بواسطة مصفوفة في 17 سبتمبر 2008 في 02:52

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

مدونة دوال

كيوتي العربي

#3

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

بتحويل المعادلات الى صور ووضعها في هذا الملف

في المرفقات

B_zier_curve__m_.pdf

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

مدونة دوال

كيوتي العربي

#4

طيب بما ان القسم هو Qt بالتقريب فإنه يجب ان نفرغ مساحة نتحدث فيه عن Qt وماتقدمه في هذا الحقل الرسومي

ناهيك عن عشرات الصفوف للرسوميات في Qt فإننا نتحدث هنا عن الصف QPainterPath لأنها في الحقيقة هي ليست رسومات فقط

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

في الرسومات وبالنسبة للرسومات فإنها توفر منحنيات بيزير الدرجة الثانية والثالثة (كما في المثال) وأقواس الدائرة وخطوط بالإضافة

لو أضفتها الى QPainter فإنها تصبح clip فكثير من الأمثلة التي نجدها مثل الرسم بالقلم في بعض البرامج هي عبارة عن قطع متصلة

وناهيك عن إختبارات التقاطع ومساحات التقاطع ورسم النصوص و و و و .... الخ الخ الخ

مع تمنياتي لكم بالتوفيق

اخوكم محمد العبدلي

تم تعديل هذه المشاركة بواسطة مصفوفة في 17 سبتمبر 2008 في 03:30

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

مدونة دوال

كيوتي العربي

#5

السلام عليكم

اقدم لك اخي مصفوفة الشكر الجزيل على تفعيل هذا القسم

بدأت اهتم اكثر ب Qt اي بيئة IDE تنصحني بها

#6
الكون كتب:
السلام عليكم

اقدم لك اخي مصفوفة الشكر الجزيل على تفعيل هذا القسم

بدأت اهتم اكثر ب Qt اي بيئة IDE تنصحني بها

هذه دروس أخونا sudanix لتركيب أهم البيئات

http://qt-ar.org/lessons/section1.html

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

مدونة دوال

كيوتي العربي

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