يتم استخدام هذه الخوارزمية لمسح تحويل الخط. تم تطويره بواسطة بريسنهام. إنها طريقة فعالة لأنها تتضمن فقط عمليات الجمع والطرح والضرب للأعداد الصحيحة. يمكن تنفيذ هذه العمليات بسرعة كبيرة بحيث يمكن إنشاء الخطوط بسرعة.
في هذه الطريقة، البكسل التالي المحدد هو البكسل الذي لديه أقل مسافة من الخط الحقيقي.
الطريقة تعمل كالتالي:
افترض بكسل P1'(خ1'،و1')، ثم حدد وحدات البكسل اللاحقة أثناء عملنا حتى الليل، موضع بكسل واحد في كل مرة في الاتجاه الأفقي نحو P2'(خ2'،و2').
بمجرد اختيار بكسل في أي خطوة
قم بإيقاف تشغيل وضع المطور
البكسل التالي هو
- إما الذي على يمينه (الحد الأدنى للخط)
- واحد أعلى يمينه وأعلى (الحد العلوي للخط)
يتم تقريب الخط بشكل أفضل بواسطة وحدات البكسل التي تقع على أقل مسافة من المسار بين P1'، ص2'.
لاختيار البيكسل التالي بين البكسل السفلي S والبكسل العلوي T.
إذا تم اختيار S
لدينا سأنا+1=سأنا+1 و صأنا+1=yأنا
إذا تم اختيار T
لدينا سأنا+1=سأنا+1 و صأنا+1=yأنا+1
إحداثيات y الفعلية للخط عند x = xأنا+1يكون
ص=مكسأنا+1+ب
المسافة من S إلى الخط الفعلي في اتجاه y
ق = ص-صأنا
المسافة من T إلى الخط الفعلي في اتجاه y
ر = (صأنا+1)-ص
الآن فكر في الفرق بين قيمتي المسافة هاتين
شارع
عندما (ق-ر)<0 ⟹ s < t< p>
أقرب بكسل هو S
عندما (s-t) ≧0 ⟹ ث أقرب بكسل هو T هذا الفرق استبدال م ب وإدخال متغير القرار حيث ج= 2△ص+△س (2ب-1) يمكننا كتابة متغير القرار دأنا+1للانزلاق التالي بما أن x_(i+1)=xأنا+1، لدينا حالات خاصة إذا كان البكسل المختار في أعلى البكسل T (أي dأنا≧0)⟹ وأنا+1=yأنا+1 إذا كان البكسل المختار موجودًا في البكسل السفلي T (أي dأنا<0)⟹ yأنا+1=صأنا وأخيراً نحسب د1 منذ م1+ب-ذأنا=0 و م = ، لدينا 1. إنها تتضمن فقط العمليات الحسابية الصحيحة، لذا فهي بسيطة. 2. يتجنب توليد النقاط المكررة. 3. يمكن تنفيذها باستخدام الأجهزة لأنها لا تستخدم الضرب والقسمة. 4. إنه أسرع بالمقارنة مع DDA (المحلل التفاضلي الرقمي) لأنه لا يتضمن حسابات الفاصلة العائمة مثل خوارزمية DDA. 1. هذه الخوارزمية مخصصة لرسم الخطوط الأساسية فقط. التهيئة ليست جزءًا من خوارزمية خط بريسنهام. لذا، لرسم خطوط ناعمة، يجب أن تبحث في خوارزمية مختلفة. الخطوة 1: بدء الخوارزمية الخطوة 2: أعلن المتغير x1،x2،و1،و2، د، ط1،أنا2،دكس،دي الخطوه 3: أدخل قيمة x1،و1،x2،و2 الخطوة 4: احسب دكس = س2-x1 الخطوة 5: اعتبر (x، y) كنقطة بداية وxنهايةأقصى قيمة ممكنة لـ x. الخطوة 6: إنشاء نقطة عند الإحداثيات (x,y). الخطوة 7: تحقق مما إذا تم إنشاء الخط بأكمله. الخطوة 8: حساب إحداثيات البكسل التالي الخطوة 9: الزيادة س = س + 1 الخطوة 10: ارسم نقطة بأحدث الإحداثيات (x، y). الخطوة 11: انتقل إلى الخطوة 7 الخطوة 12: نهاية الخوارزمية مثال: موضع البداية والنهاية للخط هو (1، 1) و (8، 5). البحث عن نقاط وسيطة. حل: س1=1 انتاج:
s-t = (y-yi)-[(yi+1)-y]
= 2y - 2yi -1
دأنا=△x (s-t)
دأنا=△س (2 (xأنا+1)+2b-2yأنا-1)
=2△xyأنا-2△y-1△x.2b-2yأنا△س-△س
دأنا=2△y.xأنا-2△x.yأنا+ج
دأنا+1=2△y.xأنا+1-2△x.yأنا+1+ج
دأنا+1-دأنا=2△ص.(سأنا+1-xأنا)- 2△x(صأنا+1-وأنا)
دأنا+1+دأنا=2△ص.(سأنا+1-سأنا)- 2△x(صأنا+1-وأنا)
دأنا+1=دأنا+2△ص-2△س
دأنا+1=دأنا+2△ص0)⟹>
د1=△س[2م(س1+1)+2b-2y1-1]
د1=△س[2(مكس1+ب-ذ1)+2m-1]
د1=2△ص-△سميزة:
العيب:
خوارزمية خط بريسنهام:
حيث س1،و1هي إحداثيات نقطة البداية
وx2،و2هي إحداثيات نقطة النهاية
احسب دى = ص2-و1
احسب ط1=2*أنت
احسب ط2=2*(دي-دكس)
احسب د=ط1-dx
إذا دي إكس<0
ثم س = س2
ص = ص2
سنهاية=س1
إذا كان dx> 0
ثم س = س1
ص = ص1
سنهاية=س20>
إذا س > = سنهاية
قف.
إذا د<0
ثم د = د + ط1
إذا د ≧ 0
ثم د = د + ط2
زيادة ص = ص + 10>جافا العودية
و1=1
س2=8
و2=5
دكس = س2-x1=8-1=7
أنت=ص2-و1=5-1=4
أنا1=2* ∆ص=2*4=8
أنا2=2*(∆y-∆x)=2*(4-7)=-6
د = أنا1-∆س=8-7=1
س و د=د+أنا1أو أنا2 1 1 د + أنا2=1+(-6)=-5 2 2 د + أنا1=-5+8=3 3 2 د + أنا2=3+(-6)=-3 4 3 د + أنا1=-3+8=5 5 3 د + أنا2=5+(-6)=-1 6 4 د + أنا1=-1+8=7 7 4 د + أنا2=7+(-6)=1 8 5 برنامج لتنفيذ خوارزمية بريسنهام لرسم الخط:
#include #include void drawline(int x0, int y0, int x1, int y1) { int dx, dy, p, x, y; dx=x1-x0; dy=y1-y0; x=x0; y=y0; p=2*dy-dx; while(x=0) { putpixel(x,y,7); y=y+1; p=p+2*dy-2*dx; } else { putpixel(x,y,7); p=p+2*dy;} x=x+1; } } int main() { int gdriver=DETECT, gmode, error, x0, y0, x1, y1; initgraph(&gdriver, &gmode, 'c:\turboc3\bgi'); printf('Enter co-ordinates of first point: '); scanf('%d%d', &x0, &y0); printf('Enter co-ordinates of second point: '); scanf('%d%d', &x1, &y1); drawline(x0, y0, x1, y1); return 0; }
الفرق بين خوارزمية DDA وخوارزمية خط بريسنهام:
خوارزمية DDA خوارزمية خط بريسنهام 1. تستخدم خوارزمية DDA النقطة العائمة، أي الحساب الحقيقي. 1. تستخدم خوارزمية خط بريسنهام النقطة الثابتة، أي حساب الأعداد الصحيحة 2. تستخدم خوارزميات DDA الضرب والقسمة في عملها 2. تستخدم خوارزمية خط بريسنهام عمليات الطرح والجمع فقط 3. خوارزمية DDA أبطأ من خوارزمية Bresenham Line في الرسم الخطي لأنها تستخدم الحساب الحقيقي (عملية النقطة العائمة) 3. خوارزمية بريسنهام أسرع من خوارزمية DDA في الخط لأنها تتضمن الجمع والطرح فقط في حساباتها وتستخدم فقط حساب الأعداد الصحيحة. 4. خوارزمية DDA ليست دقيقة وفعالة مثل خوارزمية خط بريسنهام. 4. تعد خوارزمية خط Bresenham أكثر دقة وكفاءة في خوارزمية DDA. 5. يمكن لخوارزمية DDA رسم دوائر ومنحنيات ولكنها ليست دقيقة مثل خوارزمية خط Bresenham 5. يمكن لخوارزمية خط بريسنهام رسم الدوائر والمنحنيات بدقة أكبر من خوارزمية DDA.